flwr-nightly 1.19.0.dev20250526__tar.gz → 1.19.0.dev20250527__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.
Files changed (361) hide show
  1. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/PKG-INFO +1 -1
  2. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/auth_plugin/__init__.py +2 -0
  3. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/auth_plugin/auth_plugin.py +18 -0
  4. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/constant.py +3 -0
  5. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/message.py +5 -1
  6. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/client/app.py +9 -151
  7. flwr_nightly-1.19.0.dev20250527/py/flwr/proto/fleet_pb2.py +65 -0
  8. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fleet_pb2.pyi +60 -3
  9. flwr_nightly-1.19.0.dev20250527/py/flwr/proto/message_pb2.py +52 -0
  10. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/message_pb2.pyi +25 -2
  11. flwr_nightly-1.19.0.dev20250527/py/flwr/proto/serverappio_pb2.py +64 -0
  12. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/serverappio_pb2.pyi +60 -3
  13. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/app.py +44 -1
  14. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/pyproject.toml +1 -1
  15. flwr_nightly-1.19.0.dev20250526/py/flwr/proto/fleet_pb2.py +0 -53
  16. flwr_nightly-1.19.0.dev20250526/py/flwr/proto/message_pb2.py +0 -49
  17. flwr_nightly-1.19.0.dev20250526/py/flwr/proto/serverappio_pb2.py +0 -52
  18. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/README.md +0 -0
  19. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/__init__.py +0 -0
  20. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/app/__init__.py +0 -0
  21. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/app/error.py +0 -0
  22. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/app/metadata.py +0 -0
  23. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/__init__.py +0 -0
  24. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/app.py +0 -0
  25. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  26. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  27. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/build.py +0 -0
  28. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  29. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/config_utils.py +0 -0
  30. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/constant.py +0 -0
  31. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/example.py +0 -0
  32. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/install.py +0 -0
  33. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/log.py +0 -0
  34. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/login/__init__.py +0 -0
  35. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/login/login.py +0 -0
  36. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/ls.py +0 -0
  37. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/__init__.py +0 -0
  38. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/new.py +0 -0
  39. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/__init__.py +0 -0
  40. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  41. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  42. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  43. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  44. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  45. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  46. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  48. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  49. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  50. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  51. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  52. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  53. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  54. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  55. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  56. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  57. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  58. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  59. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  60. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  61. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  62. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  63. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  64. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  67. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  68. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  69. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  70. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  71. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  72. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  73. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  74. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  75. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  76. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  77. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  78. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  79. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  80. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  81. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  82. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  83. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  84. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  85. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  86. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  87. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  88. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  89. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  90. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  91. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/run/__init__.py +0 -0
  92. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/run/run.py +0 -0
  93. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/stop.py +0 -0
  94. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/cli/utils.py +0 -0
  95. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/__init__.py +0 -0
  96. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/client.py +0 -0
  97. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/client_app.py +0 -0
  98. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/clientapp/__init__.py +0 -0
  99. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/clientapp/app.py +0 -0
  100. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  101. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/clientapp/utils.py +0 -0
  102. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  103. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  104. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  105. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  106. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  107. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  108. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  109. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/message_handler/__init__.py +0 -0
  110. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/message_handler/message_handler.py +0 -0
  111. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/__init__.py +0 -0
  112. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/centraldp_mods.py +0 -0
  113. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/comms_mods.py +0 -0
  114. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/localdp_mod.py +0 -0
  115. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  116. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  117. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  118. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/mod/utils.py +0 -0
  119. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/numpy_client.py +0 -0
  120. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/rest_client/__init__.py +0 -0
  121. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/rest_client/connection.py +0 -0
  122. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/run_info_store.py +0 -0
  123. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/client/typing.py +0 -0
  124. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/clientapp/__init__.py +0 -0
  125. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/__init__.py +0 -0
  126. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/address.py +0 -0
  127. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/args.py +0 -0
  128. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/config.py +0 -0
  129. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/context.py +0 -0
  130. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/date.py +0 -0
  131. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/differential_privacy.py +0 -0
  132. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/differential_privacy_constants.py +0 -0
  133. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/dp.py +0 -0
  134. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  135. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  136. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/exit/__init__.py +0 -0
  137. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/exit/exit.py +0 -0
  138. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/exit/exit_code.py +0 -0
  139. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/exit_handlers.py +0 -0
  140. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/grpc.py +0 -0
  141. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/heartbeat.py +0 -0
  142. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/inflatable.py +0 -0
  143. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/inflatable_grpc_utils.py +0 -0
  144. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/logger.py +0 -0
  145. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/object_ref.py +0 -0
  146. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/parameter.py +0 -0
  147. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/pyproject.py +0 -0
  148. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/__init__.py +0 -0
  149. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/array.py +0 -0
  150. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/arrayrecord.py +0 -0
  151. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/configrecord.py +0 -0
  152. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/conversion_utils.py +0 -0
  153. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/metricrecord.py +0 -0
  154. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/recorddict.py +0 -0
  155. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/record/typeddict.py +0 -0
  156. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/recorddict_compat.py +0 -0
  157. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/retry_invoker.py +0 -0
  158. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  159. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  160. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  161. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  162. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  163. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  164. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  165. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  166. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/serde.py +0 -0
  167. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/serde_utils.py +0 -0
  168. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/telemetry.py +0 -0
  169. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/typing.py +0 -0
  170. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/common/version.py +0 -0
  171. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/__init__.py +0 -0
  172. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/client/__init__.py +0 -0
  173. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  174. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  175. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/common/__init__.py +0 -0
  176. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/server/__init__.py +0 -0
  177. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/server/app.py +0 -0
  178. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/compat/simulation/__init__.py +0 -0
  179. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/__init__.py +0 -0
  180. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/clientappio_pb2.py +0 -0
  181. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  182. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/error_pb2.py +0 -0
  185. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/error_pb2.pyi +0 -0
  186. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/error_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/exec_pb2.py +0 -0
  189. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/exec_pb2.pyi +0 -0
  190. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/exec_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fab_pb2.py +0 -0
  193. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fab_pb2.pyi +0 -0
  194. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  199. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  200. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/heartbeat_pb2.py +0 -0
  203. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  204. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/log_pb2.py +0 -0
  207. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/log_pb2.pyi +0 -0
  208. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/log_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/message_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/node_pb2.py +0 -0
  213. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/node_pb2.pyi +0 -0
  214. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/node_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/recorddict_pb2.py +0 -0
  217. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  218. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  219. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  220. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/run_pb2.py +0 -0
  221. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/run_pb2.pyi +0 -0
  222. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/run_pb2_grpc.py +0 -0
  223. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  224. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  225. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  226. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/simulationio_pb2.py +0 -0
  227. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  228. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  229. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  230. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/transport_pb2.py +0 -0
  231. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/transport_pb2.pyi +0 -0
  232. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  233. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  234. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/py.typed +0 -0
  235. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/__init__.py +0 -0
  236. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/client_manager.py +0 -0
  237. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/client_proxy.py +0 -0
  238. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/compat/__init__.py +0 -0
  239. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/compat/app.py +0 -0
  240. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/compat/app_utils.py +0 -0
  241. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  242. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/compat/legacy_context.py +0 -0
  243. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/criterion.py +0 -0
  244. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  245. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/grid/__init__.py +0 -0
  246. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/grid/grid.py +0 -0
  247. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/grid/grpc_grid.py +0 -0
  248. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/grid/inmemory_grid.py +0 -0
  249. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/history.py +0 -0
  250. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/run_serverapp.py +0 -0
  251. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/server.py +0 -0
  252. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/server_app.py +0 -0
  253. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/server_config.py +0 -0
  254. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/serverapp/__init__.py +0 -0
  255. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/serverapp/app.py +0 -0
  256. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/serverapp_components.py +0 -0
  257. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/__init__.py +0 -0
  258. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/aggregate.py +0 -0
  259. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/bulyan.py +0 -0
  260. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  261. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  262. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  263. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  264. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  265. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedadagrad.py +0 -0
  266. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedadam.py +0 -0
  267. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedavg.py +0 -0
  268. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedavg_android.py +0 -0
  269. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedavgm.py +0 -0
  270. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedmedian.py +0 -0
  271. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedopt.py +0 -0
  272. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedprox.py +0 -0
  273. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  274. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  275. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  276. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  277. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/fedyogi.py +0 -0
  278. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/krum.py +0 -0
  279. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/qfedavg.py +0 -0
  280. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/strategy/strategy.py +0 -0
  281. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/__init__.py +0 -0
  282. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/ffs/__init__.py +0 -0
  283. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  284. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/ffs/ffs.py +0 -0
  285. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  286. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  287. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  288. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  289. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  290. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  291. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  292. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  293. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  294. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  295. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  296. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  297. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  298. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  299. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  300. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  301. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  302. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  303. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  304. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  305. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  306. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  307. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  308. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  309. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  310. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  311. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  312. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  313. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  314. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  315. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  316. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  317. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  318. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/superlink/utils.py +0 -0
  319. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/typing.py +0 -0
  320. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/utils/__init__.py +0 -0
  321. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/utils/tensorboard.py +0 -0
  322. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/utils/validator.py +0 -0
  323. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/__init__.py +0 -0
  324. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/constant.py +0 -0
  325. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/default_workflows.py +0 -0
  326. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  327. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  328. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  329. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/serverapp/__init__.py +0 -0
  330. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/__init__.py +0 -0
  331. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/app.py +0 -0
  332. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/legacy_app.py +0 -0
  333. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  334. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  335. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  336. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/ray_transport/utils.py +0 -0
  337. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/run_simulation.py +0 -0
  338. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/simulation/simulationio_connection.py +0 -0
  339. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supercore/__init__.py +0 -0
  340. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supercore/object_store/__init__.py +0 -0
  341. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  342. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supercore/object_store/object_store.py +0 -0
  343. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  344. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/__init__.py +0 -0
  345. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/app.py +0 -0
  346. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/deployment.py +0 -0
  347. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
  348. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/exec_grpc.py +0 -0
  349. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/exec_servicer.py +0 -0
  350. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  351. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/executor.py +0 -0
  352. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superexec/simulation.py +0 -0
  353. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/superlink/__init__.py +0 -0
  354. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/__init__.py +0 -0
  355. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/cli/__init__.py +0 -0
  356. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  357. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/nodestate/__init__.py +0 -0
  358. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  359. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  360. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  361. {flwr_nightly-1.19.0.dev20250526 → flwr_nightly-1.19.0.dev20250527}/py/flwr/supernode/start_client_internal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250526
3
+ Version: 1.19.0.dev20250527
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -17,8 +17,10 @@
17
17
 
18
18
  from .auth_plugin import CliAuthPlugin as CliAuthPlugin
19
19
  from .auth_plugin import ExecAuthPlugin as ExecAuthPlugin
20
+ from .auth_plugin import ExecAuthzPlugin as ExecAuthzPlugin
20
21
 
21
22
  __all__ = [
22
23
  "CliAuthPlugin",
23
24
  "ExecAuthPlugin",
25
+ "ExecAuthzPlugin",
24
26
  ]
@@ -64,6 +64,24 @@ class ExecAuthPlugin(ABC):
64
64
  """Refresh authentication tokens in the provided metadata."""
65
65
 
66
66
 
67
+ class ExecAuthzPlugin(ABC): # pylint: disable=too-few-public-methods
68
+ """Abstract Flower Authorization Plugin class for ExecServicer.
69
+
70
+ Parameters
71
+ ----------
72
+ user_authz_config_path : Path
73
+ Path to the YAML file containing the authorization configuration.
74
+ """
75
+
76
+ @abstractmethod
77
+ def __init__(self, user_authz_config_path: Path, verify_tls_cert: bool):
78
+ """Abstract constructor."""
79
+
80
+ @abstractmethod
81
+ def verify_user_authorization(self, user_info: UserInfo) -> bool:
82
+ """Verify user authorization request."""
83
+
84
+
67
85
  class CliAuthPlugin(ABC):
68
86
  """Abstract Flower Auth Plugin class for CLI.
69
87
 
@@ -115,6 +115,9 @@ AUTH_TYPE_YAML_KEY = "auth_type" # For key name in YAML file
115
115
  ACCESS_TOKEN_KEY = "flwr-oidc-access-token"
116
116
  REFRESH_TOKEN_KEY = "flwr-oidc-refresh-token"
117
117
 
118
+ # Constants for user authorization
119
+ AUTHZ_TYPE_YAML_KEY = "authz_type" # For key name in YAML file
120
+
118
121
  # Constants for node authentication
119
122
  PUBLIC_KEY_HEADER = "flwr-public-key-bin" # Must end with "-bin" for binary data
120
123
  SIGNATURE_HEADER = "flwr-signature-bin" # Must end with "-bin" for binary data
@@ -23,6 +23,7 @@ from typing import Any, cast, overload
23
23
  from flwr.common.date import now
24
24
  from flwr.common.logger import warn_deprecated_feature
25
25
  from flwr.proto.message_pb2 import Message as ProtoMessage # pylint: disable=E0611
26
+ from flwr.proto.message_pb2 import Metadata as ProtoMetadata # pylint: disable=E0611
26
27
 
27
28
  from ..app.error import Error
28
29
  from ..app.metadata import Metadata
@@ -351,9 +352,12 @@ class Message(InflatableObject):
351
352
 
352
353
  def deflate(self) -> bytes:
353
354
  """Deflate message."""
355
+ # Exclude message_id from serialization
356
+ proto_metadata: ProtoMetadata = metadata_to_proto(self.metadata)
357
+ proto_metadata.message_id = ""
354
358
  # Store message metadata and error in object body
355
359
  obj_body = ProtoMessage(
356
- metadata=metadata_to_proto(self.metadata),
360
+ metadata=proto_metadata,
357
361
  content=None,
358
362
  error=error_to_proto(self.error) if self.has_error() else None,
359
363
  ).SerializeToString(deterministic=True)
@@ -15,18 +15,12 @@
15
15
  """Flower client app."""
16
16
 
17
17
 
18
- import multiprocessing
19
- import os
20
- import sys
21
- import threading
22
18
  import time
23
19
  from contextlib import AbstractContextManager
24
20
  from logging import ERROR, INFO, WARN
25
- from os import urandom
26
21
  from pathlib import Path
27
- from typing import Callable, Optional, Union, cast
22
+ from typing import Callable, Optional, Union
28
23
 
29
- import grpc
30
24
  from cryptography.hazmat.primitives.asymmetric import ec
31
25
  from grpc import RpcError
32
26
 
@@ -35,11 +29,6 @@ from flwr.cli.config_utils import get_fab_metadata
35
29
  from flwr.cli.install import install_from_fab
36
30
  from flwr.client.client import Client
37
31
  from flwr.client.client_app import ClientApp, LoadClientAppError
38
- from flwr.client.clientapp.app import flwr_clientapp
39
- from flwr.client.clientapp.clientappio_servicer import (
40
- ClientAppInputs,
41
- ClientAppIoServicer,
42
- )
43
32
  from flwr.client.grpc_adapter_client.connection import grpc_adapter
44
33
  from flwr.client.grpc_rere_client.connection import grpc_request_response
45
34
  from flwr.client.message_handler.message_handler import handle_control_message
@@ -49,13 +38,7 @@ from flwr.client.typing import ClientFnExt
49
38
  from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
50
39
  from flwr.common.address import parse_address
51
40
  from flwr.common.constant import (
52
- CLIENT_OCTET,
53
- CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
54
- ISOLATION_MODE_PROCESS,
55
- ISOLATION_MODE_SUBPROCESS,
56
41
  MAX_RETRY_DELAY,
57
- RUN_ID_NUM_BYTES,
58
- SERVER_OCTET,
59
42
  TRANSPORT_TYPE_GRPC_ADAPTER,
60
43
  TRANSPORT_TYPE_GRPC_BIDI,
61
44
  TRANSPORT_TYPE_GRPC_RERE,
@@ -64,12 +47,10 @@ from flwr.common.constant import (
64
47
  ErrorCode,
65
48
  )
66
49
  from flwr.common.exit import ExitCode, flwr_exit
67
- from flwr.common.grpc import generic_create_grpc_server
68
50
  from flwr.common.logger import log, warn_deprecated_feature
69
51
  from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
70
52
  from flwr.common.typing import Fab, Run, RunNotRunningException, UserConfig
71
53
  from flwr.compat.client.grpc_client.connection import grpc_connection
72
- from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
73
54
  from flwr.supernode.nodestate import NodeStateFactory
74
55
 
75
56
 
@@ -238,8 +219,6 @@ def start_client_internal(
238
219
  max_retries: Optional[int] = None,
239
220
  max_wait_time: Optional[float] = None,
240
221
  flwr_path: Optional[Path] = None,
241
- isolation: Optional[str] = None,
242
- clientappio_api_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
243
222
  ) -> None:
244
223
  """Start a Flower client node which connects to a Flower server.
245
224
 
@@ -292,17 +271,6 @@ def start_client_internal(
292
271
  If set to None, there is no limit to the total time.
293
272
  flwr_path: Optional[Path] (default: None)
294
273
  The fully resolved path containing installed Flower Apps.
295
- isolation : Optional[str] (default: None)
296
- Isolation mode for `ClientApp`. Possible values are `subprocess` and
297
- `process`. Defaults to `None`, which runs the `ClientApp` in the same process
298
- as the SuperNode. If `subprocess`, the `ClientApp` runs in a subprocess started
299
- by the SueprNode and communicates using gRPC at the address
300
- `clientappio_api_address`. If `process`, the `ClientApp` runs in a separate
301
- isolated process and communicates using gRPC at the address
302
- `clientappio_api_address`.
303
- clientappio_api_address : Optional[str]
304
- (default: `CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS`)
305
- The SuperNode gRPC server address.
306
274
  """
307
275
  if insecure is None:
308
276
  insecure = root_certificates is None
@@ -328,18 +296,6 @@ def start_client_internal(
328
296
 
329
297
  load_client_app_fn = _load_client_app
330
298
 
331
- if isolation:
332
- if clientappio_api_address is None:
333
- raise ValueError(
334
- f"`clientappio_api_address` required when `isolation` is "
335
- f"{ISOLATION_MODE_SUBPROCESS} or {ISOLATION_MODE_PROCESS}",
336
- )
337
- _clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
338
- address=clientappio_api_address,
339
- certificates=None,
340
- )
341
- clientappio_api_address = cast(str, clientappio_api_address)
342
-
343
299
  # At this point, only `load_client_app_fn` should be used
344
300
  # Both `client` and `client_fn` must not be used directly
345
301
 
@@ -390,7 +346,6 @@ def start_client_internal(
390
346
  run_info_store: Optional[DeprecatedRunInfoStore] = None
391
347
  state_factory = NodeStateFactory()
392
348
  state = state_factory.state()
393
- mp_spawn_context = multiprocessing.get_context("spawn")
394
349
 
395
350
  runs: dict[int, Run] = {}
396
351
 
@@ -475,9 +430,8 @@ def start_client_internal(
475
430
  run: Run = runs[run_id]
476
431
  if get_fab is not None and run.fab_hash:
477
432
  fab = get_fab(run.fab_hash, run_id)
478
- if not isolation:
479
- # If `ClientApp` runs in the same process, install the FAB
480
- install_from_fab(fab.content, flwr_path, True)
433
+ # If `ClientApp` runs in the same process, install the FAB
434
+ install_from_fab(fab.content, flwr_path, True)
481
435
  fab_id, fab_version = get_fab_metadata(fab.content)
482
436
  else:
483
437
  fab = None
@@ -504,73 +458,13 @@ def start_client_internal(
504
458
 
505
459
  # Handle app loading and task message
506
460
  try:
507
- if isolation:
508
- # Two isolation modes:
509
- # 1. `subprocess`: SuperNode is starting the ClientApp
510
- # process as a subprocess.
511
- # 2. `process`: ClientApp process gets started separately
512
- # (via `flwr-clientapp`), for example, in a separate
513
- # Docker container.
514
-
515
- # Generate SuperNode token
516
- token = int.from_bytes(urandom(RUN_ID_NUM_BYTES), "little")
517
-
518
- # Mode 1: SuperNode starts ClientApp as subprocess
519
- start_subprocess = isolation == ISOLATION_MODE_SUBPROCESS
520
-
521
- # Share Message and Context with servicer
522
- clientappio_servicer.set_inputs(
523
- clientapp_input=ClientAppInputs(
524
- message=message,
525
- context=context,
526
- run=run,
527
- fab=fab,
528
- token=token,
529
- ),
530
- token_returned=start_subprocess,
531
- )
532
-
533
- if start_subprocess:
534
- _octet, _colon, _port = (
535
- clientappio_api_address.rpartition(":")
536
- )
537
- io_address = (
538
- f"{CLIENT_OCTET}:{_port}"
539
- if _octet == SERVER_OCTET
540
- else clientappio_api_address
541
- )
542
- # Start ClientApp subprocess
543
- command = [
544
- "flwr-clientapp",
545
- "--clientappio-api-address",
546
- io_address,
547
- "--token",
548
- str(token),
549
- ]
550
- command.append("--insecure")
551
-
552
- proc = mp_spawn_context.Process(
553
- target=_run_flwr_clientapp,
554
- args=(command, os.getpid()),
555
- daemon=True,
556
- )
557
- proc.start()
558
- proc.join()
559
- else:
560
- # Wait for output to become available
561
- while not clientappio_servicer.has_outputs():
562
- time.sleep(0.1)
563
-
564
- outputs = clientappio_servicer.get_outputs()
565
- reply_message, context = outputs.message, outputs.context
566
- else:
567
- # Load ClientApp instance
568
- client_app: ClientApp = load_client_app_fn(
569
- fab_id, fab_version, run.fab_hash
570
- )
461
+ # Load ClientApp instance
462
+ client_app: ClientApp = load_client_app_fn(
463
+ fab_id, fab_version, run.fab_hash
464
+ )
571
465
 
572
- # Execute ClientApp
573
- reply_message = client_app(message=message, context=context)
466
+ # Execute ClientApp
467
+ reply_message = client_app(message=message, context=context)
574
468
  except Exception as ex: # pylint: disable=broad-exception-caught
575
469
 
576
470
  # Legacy grpc-bidi
@@ -801,39 +695,3 @@ def _init_connection(transport: Optional[str], server_address: str) -> tuple[
801
695
  )
802
696
 
803
697
  return connection, address, error_type
804
-
805
-
806
- def _run_flwr_clientapp(args: list[str], main_pid: int) -> None:
807
- # Monitor the main process in case of SIGKILL
808
- def main_process_monitor() -> None:
809
- while True:
810
- time.sleep(1)
811
- if os.getppid() != main_pid:
812
- os.kill(os.getpid(), 9)
813
-
814
- threading.Thread(target=main_process_monitor, daemon=True).start()
815
-
816
- # Run the command
817
- sys.argv = args
818
- flwr_clientapp()
819
-
820
-
821
- def run_clientappio_api_grpc(
822
- address: str,
823
- certificates: Optional[tuple[bytes, bytes, bytes]],
824
- ) -> tuple[grpc.Server, ClientAppIoServicer]:
825
- """Run ClientAppIo API gRPC server."""
826
- clientappio_servicer: grpc.Server = ClientAppIoServicer()
827
- clientappio_add_servicer_to_server_fn = add_ClientAppIoServicer_to_server
828
- clientappio_grpc_server = generic_create_grpc_server(
829
- servicer_and_add_fn=(
830
- clientappio_servicer,
831
- clientappio_add_servicer_to_server_fn,
832
- ),
833
- server_address=address,
834
- max_message_length=GRPC_MAX_MESSAGE_LENGTH,
835
- certificates=certificates,
836
- )
837
- log(INFO, "Starting Flower ClientAppIo gRPC server on %s", address)
838
- clientappio_grpc_server.start()
839
- return clientappio_grpc_server, clientappio_servicer
@@ -0,0 +1,65 @@
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.1
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 heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
16
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
17
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
18
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
19
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"/\n\x11\x43reateNodeRequest\x12\x1a\n\x12heartbeat_interval\x18\x01 \x01(\x01\"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\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"\x87\x02\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12L\n\x0fobjects_to_pull\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PullMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x91\x02\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12Z\n\x17msg_to_children_mapping\x18\x03 \x03(\x0b\x32\x39.flwr.proto.PushMessagesRequest.MsgToChildrenMappingEntry\x1aR\n\x19MsgToChildrenMappingEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\xcb\x02\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x12L\n\x0fobjects_to_push\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PushMessagesResponse.ObjectsToPushEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xd7\x05\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\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
27
+ if _descriptor._USE_C_DESCRIPTORS == False:
28
+ DESCRIPTOR._options = None
29
+ _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._options = None
30
+ _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_options = b'8\001'
31
+ _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._options = None
32
+ _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_options = b'8\001'
33
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
34
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
35
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
36
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_options = b'8\001'
37
+ _globals['_CREATENODEREQUEST']._serialized_start=159
38
+ _globals['_CREATENODEREQUEST']._serialized_end=206
39
+ _globals['_CREATENODERESPONSE']._serialized_start=208
40
+ _globals['_CREATENODERESPONSE']._serialized_end=260
41
+ _globals['_DELETENODEREQUEST']._serialized_start=262
42
+ _globals['_DELETENODEREQUEST']._serialized_end=313
43
+ _globals['_DELETENODERESPONSE']._serialized_start=315
44
+ _globals['_DELETENODERESPONSE']._serialized_end=335
45
+ _globals['_PULLMESSAGESREQUEST']._serialized_start=337
46
+ _globals['_PULLMESSAGESREQUEST']._serialized_end=411
47
+ _globals['_PULLMESSAGESRESPONSE']._serialized_start=414
48
+ _globals['_PULLMESSAGESRESPONSE']._serialized_end=677
49
+ _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=602
50
+ _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=677
51
+ _globals['_PUSHMESSAGESREQUEST']._serialized_start=680
52
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=953
53
+ _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_start=871
54
+ _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_end=953
55
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=956
56
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=1287
57
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=1164
58
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=1210
59
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=1212
60
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=1287
61
+ _globals['_RECONNECT']._serialized_start=1289
62
+ _globals['_RECONNECT']._serialized_end=1319
63
+ _globals['_FLEET']._serialized_start=1322
64
+ _globals['_FLEET']._serialized_end=2049
65
+ # @@protoc_insertion_point(module_scope)
@@ -78,37 +78,75 @@ global___PullMessagesRequest = PullMessagesRequest
78
78
 
79
79
  class PullMessagesResponse(google.protobuf.message.Message):
80
80
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
81
+ class ObjectsToPullEntry(google.protobuf.message.Message):
82
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
83
+ KEY_FIELD_NUMBER: builtins.int
84
+ VALUE_FIELD_NUMBER: builtins.int
85
+ key: typing.Text
86
+ @property
87
+ def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
88
+ def __init__(self,
89
+ *,
90
+ key: typing.Text = ...,
91
+ value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
92
+ ) -> None: ...
93
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
94
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
95
+
81
96
  RECONNECT_FIELD_NUMBER: builtins.int
82
97
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
98
+ OBJECTS_TO_PULL_FIELD_NUMBER: builtins.int
83
99
  @property
84
100
  def reconnect(self) -> global___Reconnect: ...
85
101
  @property
86
102
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
103
+ @property
104
+ def objects_to_pull(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
87
105
  def __init__(self,
88
106
  *,
89
107
  reconnect: typing.Optional[global___Reconnect] = ...,
90
108
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
109
+ objects_to_pull: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
91
110
  ) -> None: ...
92
111
  def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
93
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","reconnect",b"reconnect"]) -> None: ...
112
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","objects_to_pull",b"objects_to_pull","reconnect",b"reconnect"]) -> None: ...
94
113
  global___PullMessagesResponse = PullMessagesResponse
95
114
 
96
115
  class PushMessagesRequest(google.protobuf.message.Message):
97
116
  """PushMessages messages"""
98
117
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
118
+ class MsgToChildrenMappingEntry(google.protobuf.message.Message):
119
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
120
+ KEY_FIELD_NUMBER: builtins.int
121
+ VALUE_FIELD_NUMBER: builtins.int
122
+ key: typing.Text
123
+ @property
124
+ def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
125
+ def __init__(self,
126
+ *,
127
+ key: typing.Text = ...,
128
+ value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
129
+ ) -> None: ...
130
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
131
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
132
+
99
133
  NODE_FIELD_NUMBER: builtins.int
100
134
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
135
+ MSG_TO_CHILDREN_MAPPING_FIELD_NUMBER: builtins.int
101
136
  @property
102
137
  def node(self) -> flwr.proto.node_pb2.Node: ...
103
138
  @property
104
139
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
140
+ @property
141
+ def msg_to_children_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
105
142
  def __init__(self,
106
143
  *,
107
144
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
108
145
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
146
+ msg_to_children_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
109
147
  ) -> None: ...
110
148
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
111
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","node",b"node"]) -> None: ...
149
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_children_mapping",b"msg_to_children_mapping","node",b"node"]) -> None: ...
112
150
  global___PushMessagesRequest = PushMessagesRequest
113
151
 
114
152
  class PushMessagesResponse(google.protobuf.message.Message):
@@ -126,19 +164,38 @@ class PushMessagesResponse(google.protobuf.message.Message):
126
164
  ) -> None: ...
127
165
  def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
128
166
 
167
+ class ObjectsToPushEntry(google.protobuf.message.Message):
168
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
169
+ KEY_FIELD_NUMBER: builtins.int
170
+ VALUE_FIELD_NUMBER: builtins.int
171
+ key: typing.Text
172
+ @property
173
+ def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
174
+ def __init__(self,
175
+ *,
176
+ key: typing.Text = ...,
177
+ value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
178
+ ) -> None: ...
179
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
180
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
181
+
129
182
  RECONNECT_FIELD_NUMBER: builtins.int
130
183
  RESULTS_FIELD_NUMBER: builtins.int
184
+ OBJECTS_TO_PUSH_FIELD_NUMBER: builtins.int
131
185
  @property
132
186
  def reconnect(self) -> global___Reconnect: ...
133
187
  @property
134
188
  def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
189
+ @property
190
+ def objects_to_push(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
135
191
  def __init__(self,
136
192
  *,
137
193
  reconnect: typing.Optional[global___Reconnect] = ...,
138
194
  results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
195
+ objects_to_push: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
139
196
  ) -> None: ...
140
197
  def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
141
- def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
198
+ def ClearField(self, field_name: typing_extensions.Literal["objects_to_push",b"objects_to_push","reconnect",b"reconnect","results",b"results"]) -> None: ...
142
199
  global___PushMessagesResponse = PushMessagesResponse
143
200
 
144
201
  class Reconnect(google.protobuf.message.Message):
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/message.proto
4
+ # Protobuf Python Version: 4.25.1
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 error_pb2 as flwr_dot_proto_dot_error__pb2
16
+ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
17
+ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
19
+
20
+
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1e\n\tObjectIDs\x12\x11\n\tobject_id\x18\x01 \x03(\t\"^\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"\x14\n\x12PushObjectResponse\"F\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\",\n\x12PullObjectResponse\x12\x16\n\x0eobject_content\x18\x01 \x01(\x0c\x62\x06proto3')
22
+
23
+ _globals = globals()
24
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
25
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.message_pb2', _globals)
26
+ if _descriptor._USE_C_DESCRIPTORS == False:
27
+ DESCRIPTOR._options = None
28
+ _globals['_CONTEXT_NODECONFIGENTRY']._options = None
29
+ _globals['_CONTEXT_NODECONFIGENTRY']._serialized_options = b'8\001'
30
+ _globals['_CONTEXT_RUNCONFIGENTRY']._options = None
31
+ _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_options = b'8\001'
32
+ _globals['_MESSAGE']._serialized_start=144
33
+ _globals['_MESSAGE']._serialized_end=268
34
+ _globals['_CONTEXT']._serialized_start=271
35
+ _globals['_CONTEXT']._serialized_end=607
36
+ _globals['_CONTEXT_NODECONFIGENTRY']._serialized_start=468
37
+ _globals['_CONTEXT_NODECONFIGENTRY']._serialized_end=537
38
+ _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=539
39
+ _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=607
40
+ _globals['_METADATA']._serialized_start=610
41
+ _globals['_METADATA']._serialized_end=800
42
+ _globals['_OBJECTIDS']._serialized_start=802
43
+ _globals['_OBJECTIDS']._serialized_end=832
44
+ _globals['_PUSHOBJECTREQUEST']._serialized_start=834
45
+ _globals['_PUSHOBJECTREQUEST']._serialized_end=928
46
+ _globals['_PUSHOBJECTRESPONSE']._serialized_start=930
47
+ _globals['_PUSHOBJECTRESPONSE']._serialized_end=950
48
+ _globals['_PULLOBJECTREQUEST']._serialized_start=952
49
+ _globals['_PULLOBJECTREQUEST']._serialized_end=1022
50
+ _globals['_PULLOBJECTRESPONSE']._serialized_start=1024
51
+ _globals['_PULLOBJECTRESPONSE']._serialized_end=1068
52
+ # @@protoc_insertion_point(module_scope)
@@ -4,6 +4,7 @@ isort:skip_file
4
4
  """
5
5
  import builtins
6
6
  import flwr.proto.error_pb2
7
+ import flwr.proto.node_pb2
7
8
  import flwr.proto.recorddict_pb2
8
9
  import flwr.proto.transport_pb2
9
10
  import google.protobuf.descriptor
@@ -127,19 +128,36 @@ class Metadata(google.protobuf.message.Message):
127
128
  def ClearField(self, field_name: typing_extensions.Literal["created_at",b"created_at","dst_node_id",b"dst_node_id","group_id",b"group_id","message_id",b"message_id","message_type",b"message_type","reply_to_message_id",b"reply_to_message_id","run_id",b"run_id","src_node_id",b"src_node_id","ttl",b"ttl"]) -> None: ...
128
129
  global___Metadata = Metadata
129
130
 
131
+ class ObjectIDs(google.protobuf.message.Message):
132
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
133
+ OBJECT_ID_FIELD_NUMBER: builtins.int
134
+ @property
135
+ def object_id(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
136
+ def __init__(self,
137
+ *,
138
+ object_id: typing.Optional[typing.Iterable[typing.Text]] = ...,
139
+ ) -> None: ...
140
+ def ClearField(self, field_name: typing_extensions.Literal["object_id",b"object_id"]) -> None: ...
141
+ global___ObjectIDs = ObjectIDs
142
+
130
143
  class PushObjectRequest(google.protobuf.message.Message):
131
144
  """PushObject messages"""
132
145
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
146
+ NODE_FIELD_NUMBER: builtins.int
133
147
  OBJECT_ID_FIELD_NUMBER: builtins.int
134
148
  OBJECT_CONTENT_FIELD_NUMBER: builtins.int
149
+ @property
150
+ def node(self) -> flwr.proto.node_pb2.Node: ...
135
151
  object_id: typing.Text
136
152
  object_content: builtins.bytes
137
153
  def __init__(self,
138
154
  *,
155
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
139
156
  object_id: typing.Text = ...,
140
157
  object_content: builtins.bytes = ...,
141
158
  ) -> None: ...
142
- def ClearField(self, field_name: typing_extensions.Literal["object_content",b"object_content","object_id",b"object_id"]) -> None: ...
159
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
160
+ def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_content",b"object_content","object_id",b"object_id"]) -> None: ...
143
161
  global___PushObjectRequest = PushObjectRequest
144
162
 
145
163
  class PushObjectResponse(google.protobuf.message.Message):
@@ -151,13 +169,18 @@ global___PushObjectResponse = PushObjectResponse
151
169
  class PullObjectRequest(google.protobuf.message.Message):
152
170
  """PullObject messages"""
153
171
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
172
+ NODE_FIELD_NUMBER: builtins.int
154
173
  OBJECT_ID_FIELD_NUMBER: builtins.int
174
+ @property
175
+ def node(self) -> flwr.proto.node_pb2.Node: ...
155
176
  object_id: typing.Text
156
177
  def __init__(self,
157
178
  *,
179
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
158
180
  object_id: typing.Text = ...,
159
181
  ) -> None: ...
160
- def ClearField(self, field_name: typing_extensions.Literal["object_id",b"object_id"]) -> None: ...
182
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
183
+ def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_id",b"object_id"]) -> None: ...
161
184
  global___PullObjectRequest = PullObjectRequest
162
185
 
163
186
  class PullObjectResponse(google.protobuf.message.Message):