flwr 1.15.0__tar.gz → 1.15.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. {flwr-1.15.0 → flwr-1.15.1}/PKG-INFO +1 -1
  2. {flwr-1.15.0 → flwr-1.15.1}/pyproject.toml +1 -1
  3. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +2 -2
  4. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  5. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  6. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  7. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  8. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  9. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  10. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
  11. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  12. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  13. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/utils.py +2 -2
  14. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/constant.py +9 -7
  15. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit_handlers.py +17 -29
  16. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/object_ref.py +0 -14
  17. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/app.py +2 -2
  18. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +17 -4
  19. {flwr-1.15.0 → flwr-1.15.1}/LICENSE +0 -0
  20. {flwr-1.15.0 → flwr-1.15.1}/README.md +0 -0
  21. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/__init__.py +0 -0
  22. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/__init__.py +0 -0
  23. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/app.py +0 -0
  24. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/auth_plugin/__init__.py +0 -0
  25. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/build.py +0 -0
  26. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  27. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/config_utils.py +0 -0
  28. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/constant.py +0 -0
  29. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/example.py +0 -0
  30. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/install.py +0 -0
  31. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/log.py +0 -0
  32. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/login/__init__.py +0 -0
  33. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/login/login.py +0 -0
  34. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/ls.py +0 -0
  35. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/__init__.py +0 -0
  36. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/new.py +0 -0
  37. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  38. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  39. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  40. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  41. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  42. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  43. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  44. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  45. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  46. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  47. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  48. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  49. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  50. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  51. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  52. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  53. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  54. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  55. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  56. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  57. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  58. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  59. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  60. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  61. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  62. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  63. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  64. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  65. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  66. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  67. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  68. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  69. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  70. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  71. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  72. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  73. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  74. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  75. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  76. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  77. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  78. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  79. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  80. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/run/__init__.py +0 -0
  81. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/run/run.py +0 -0
  82. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/stop.py +0 -0
  83. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/__init__.py +0 -0
  84. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/app.py +0 -0
  85. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/client.py +0 -0
  86. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/client_app.py +0 -0
  87. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/__init__.py +0 -0
  88. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/app.py +0 -0
  89. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  90. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/utils.py +0 -0
  91. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  92. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  93. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  94. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  95. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_client/connection.py +0 -0
  96. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  97. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  98. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  99. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  100. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/heartbeat.py +0 -0
  101. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/__init__.py +0 -0
  102. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  103. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  104. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/__init__.py +0 -0
  105. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  106. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/comms_mods.py +0 -0
  107. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  108. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  109. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  110. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  111. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/utils.py +0 -0
  112. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/__init__.py +0 -0
  113. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  114. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  115. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  116. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/numpy_client.py +0 -0
  117. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/rest_client/__init__.py +0 -0
  118. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/rest_client/connection.py +0 -0
  119. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/run_info_store.py +0 -0
  120. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/supernode/__init__.py +0 -0
  121. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/supernode/app.py +0 -0
  122. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/typing.py +0 -0
  123. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/__init__.py +0 -0
  124. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/address.py +0 -0
  125. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/args.py +0 -0
  126. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  127. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  128. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/config.py +0 -0
  129. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/context.py +0 -0
  130. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/date.py +0 -0
  131. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/differential_privacy.py +0 -0
  132. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  133. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/dp.py +0 -0
  134. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/__init__.py +0 -0
  135. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/exit.py +0 -0
  136. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/exit_code.py +0 -0
  137. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/grpc.py +0 -0
  138. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/logger.py +0 -0
  139. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/message.py +0 -0
  140. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/parameter.py +0 -0
  141. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/pyproject.py +0 -0
  142. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/__init__.py +0 -0
  143. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/configsrecord.py +0 -0
  144. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/conversion_utils.py +0 -0
  145. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/metricsrecord.py +0 -0
  146. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/parametersrecord.py +0 -0
  147. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/recordset.py +0 -0
  148. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/typeddict.py +0 -0
  149. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/recordset_compat.py +0 -0
  150. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/retry_invoker.py +0 -0
  151. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  152. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  153. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  154. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  155. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  156. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  157. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  158. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  159. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/serde.py +0 -0
  160. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/telemetry.py +0 -0
  161. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/typing.py +0 -0
  162. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/version.py +0 -0
  163. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/__init__.py +0 -0
  164. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  165. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  166. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  167. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  168. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2.py +0 -0
  169. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2.pyi +0 -0
  170. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  171. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  172. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2.py +0 -0
  173. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  174. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  175. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  176. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2.py +0 -0
  177. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  178. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  179. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  180. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2.py +0 -0
  181. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  182. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  183. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  184. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  185. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  186. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  187. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  188. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2.py +0 -0
  189. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2.pyi +0 -0
  190. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  191. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  192. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2.py +0 -0
  193. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2.pyi +0 -0
  194. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  195. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  196. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2.py +0 -0
  197. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2.pyi +0 -0
  198. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  199. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  200. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2.py +0 -0
  201. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  202. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  203. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  204. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2.py +0 -0
  205. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2.pyi +0 -0
  206. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  207. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  208. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  209. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  210. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  211. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  212. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  213. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  214. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  215. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  216. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2.py +0 -0
  217. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2.pyi +0 -0
  218. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  219. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  220. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2.py +0 -0
  221. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  222. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  223. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  224. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/py.typed +0 -0
  225. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/__init__.py +0 -0
  226. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/client_manager.py +0 -0
  227. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/client_proxy.py +0 -0
  228. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/__init__.py +0 -0
  229. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/app.py +0 -0
  230. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/app_utils.py +0 -0
  231. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  232. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/legacy_context.py +0 -0
  233. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/criterion.py +0 -0
  234. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/__init__.py +0 -0
  235. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/driver.py +0 -0
  236. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  237. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  238. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/history.py +0 -0
  239. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/run_serverapp.py +0 -0
  240. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server.py +0 -0
  241. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server_app.py +0 -0
  242. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server_config.py +0 -0
  243. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp/__init__.py +0 -0
  244. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp/app.py +0 -0
  245. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp_components.py +0 -0
  246. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/__init__.py +0 -0
  247. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/aggregate.py +0 -0
  248. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/bulyan.py +0 -0
  249. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  250. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  251. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  252. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  253. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  254. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  255. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedadam.py +0 -0
  256. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavg.py +0 -0
  257. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  258. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  259. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  260. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedopt.py +0 -0
  261. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedprox.py +0 -0
  262. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  263. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  264. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  265. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  266. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  267. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/krum.py +0 -0
  268. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  269. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/strategy.py +0 -0
  270. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/__init__.py +0 -0
  271. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  272. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  273. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
  274. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  275. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  276. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  277. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  278. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  279. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  280. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  281. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  282. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  283. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  284. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  285. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  286. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  287. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  288. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  289. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  290. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  291. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  292. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  293. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  294. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  295. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  296. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  297. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  298. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  299. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  300. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  301. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  302. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  303. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  304. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  305. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  306. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/utils.py +0 -0
  307. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/typing.py +0 -0
  308. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/__init__.py +0 -0
  309. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/tensorboard.py +0 -0
  310. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/validator.py +0 -0
  311. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/__init__.py +0 -0
  312. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/constant.py +0 -0
  313. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  314. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  315. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  316. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  317. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/__init__.py +0 -0
  318. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/app.py +0 -0
  319. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/legacy_app.py +0 -0
  320. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  321. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  322. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  323. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  324. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/run_simulation.py +0 -0
  325. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  326. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/__init__.py +0 -0
  327. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/app.py +0 -0
  328. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/deployment.py +0 -0
  329. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_grpc.py +0 -0
  330. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_servicer.py +0 -0
  331. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  332. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/executor.py +0 -0
  333. {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr
3
- Version: 1.15.0
3
+ Version: 1.15.1
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr"
7
- version = "1.15.0"
7
+ version = "1.15.1"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -26,7 +26,7 @@ import typer
26
26
  from flwr.common.auth_plugin import CliAuthPlugin
27
27
  from flwr.common.constant import (
28
28
  ACCESS_TOKEN_KEY,
29
- AUTH_TYPE_KEY,
29
+ AUTH_TYPE_JSON_KEY,
30
30
  REFRESH_TOKEN_KEY,
31
31
  AuthType,
32
32
  )
@@ -97,7 +97,7 @@ class OidcCliPlugin(CliAuthPlugin):
97
97
  self.access_token = credentials.access_token
98
98
  self.refresh_token = credentials.refresh_token
99
99
  json_dict = {
100
- AUTH_TYPE_KEY: AuthType.OIDC,
100
+ AUTH_TYPE_JSON_KEY: AuthType.OIDC,
101
101
  ACCESS_TOKEN_KEY: credentials.access_token,
102
102
  REFRESH_TOKEN_KEY: credentials.refresh_token,
103
103
  }
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "torch==2.5.1",
14
14
  "torchvision==0.20.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets>=0.5.0",
13
13
  "torch==2.3.1",
14
14
  "trl==0.8.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets>=0.5.0",
13
13
  "torch==2.5.1",
14
14
  "transformers>=4.30.0,<5.0",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "jax==0.4.30",
13
13
  "jaxlib==0.4.30",
14
14
  "scikit-learn==1.6.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "mlx==0.21.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "numpy>=2.0.2",
13
13
  ]
14
14
 
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "torch==2.5.1",
14
14
  "torchvision==0.20.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "scikit-learn>=1.6.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.0",
11
+ "flwr[simulation]>=1.15.1",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
@@ -28,7 +28,7 @@ import typer
28
28
 
29
29
  from flwr.cli.cli_user_auth_interceptor import CliUserAuthInterceptor
30
30
  from flwr.common.auth_plugin import CliAuthPlugin
31
- from flwr.common.constant import AUTH_TYPE_KEY, CREDENTIALS_DIR, FLWR_DIR
31
+ from flwr.common.constant import AUTH_TYPE_JSON_KEY, CREDENTIALS_DIR, FLWR_DIR
32
32
  from flwr.common.grpc import (
33
33
  GRPC_MAX_MESSAGE_LENGTH,
34
34
  create_channel,
@@ -239,7 +239,7 @@ def try_obtain_cli_auth_plugin(
239
239
  try:
240
240
  with config_path.open("r", encoding="utf-8") as file:
241
241
  json_file = json.load(file)
242
- auth_type = json_file[AUTH_TYPE_KEY]
242
+ auth_type = json_file[AUTH_TYPE_JSON_KEY]
243
243
  except (FileNotFoundError, KeyError):
244
244
  typer.secho(
245
245
  "❌ Missing or invalid credentials for user authentication. "
@@ -108,15 +108,17 @@ MAX_RETRY_DELAY = 20 # Maximum delay duration between two consecutive retries.
108
108
 
109
109
  # Constants for user authentication
110
110
  CREDENTIALS_DIR = ".credentials"
111
- AUTH_TYPE_KEY = "auth_type"
112
- ACCESS_TOKEN_KEY = "access_token"
113
- REFRESH_TOKEN_KEY = "refresh_token"
111
+ AUTH_TYPE_JSON_KEY = "auth-type" # For key name in JSON file
112
+ AUTH_TYPE_YAML_KEY = "auth_type" # For key name in YAML file
113
+ ACCESS_TOKEN_KEY = "flwr-oidc-access-token"
114
+ REFRESH_TOKEN_KEY = "flwr-oidc-refresh-token"
114
115
 
115
116
  # Constants for node authentication
116
- PUBLIC_KEY_HEADER = "public-key-bin" # Must end with "-bin" for binary data
117
- SIGNATURE_HEADER = "signature-bin" # Must end with "-bin" for binary data
118
- TIMESTAMP_HEADER = "timestamp"
119
- TIMESTAMP_TOLERANCE = 10 # Tolerance for timestamp verification
117
+ PUBLIC_KEY_HEADER = "flwr-public-key-bin" # Must end with "-bin" for binary data
118
+ SIGNATURE_HEADER = "flwr-signature-bin" # Must end with "-bin" for binary data
119
+ TIMESTAMP_HEADER = "flwr-timestamp"
120
+ TIMESTAMP_TOLERANCE = 10 # General tolerance for timestamp verification
121
+ SYSTEM_TIME_TOLERANCE = 5 # Allowance for system time drift
120
122
 
121
123
 
122
124
  class MessageType:
@@ -15,10 +15,10 @@
15
15
  """Common function to register exit handlers for server and client."""
16
16
 
17
17
 
18
- from signal import SIGINT, SIGQUIT, SIGTERM, signal
18
+ import signal
19
19
  from threading import Thread
20
20
  from types import FrameType
21
- from typing import Optional
21
+ from typing import Callable, Optional
22
22
 
23
23
  from grpc import Server
24
24
 
@@ -26,12 +26,15 @@ from flwr.common.telemetry import EventType
26
26
 
27
27
  from .exit import ExitCode, flwr_exit
28
28
 
29
- SIGNAL_TO_EXIT_CODE = {
30
- SIGINT: ExitCode.GRACEFUL_EXIT_SIGINT,
31
- SIGQUIT: ExitCode.GRACEFUL_EXIT_SIGQUIT,
32
- SIGTERM: ExitCode.GRACEFUL_EXIT_SIGTERM,
29
+ SIGNAL_TO_EXIT_CODE: dict[int, int] = {
30
+ signal.SIGINT: ExitCode.GRACEFUL_EXIT_SIGINT,
31
+ signal.SIGTERM: ExitCode.GRACEFUL_EXIT_SIGTERM,
33
32
  }
34
33
 
34
+ # SIGQUIT is not available on Windows
35
+ if hasattr(signal, "SIGQUIT"):
36
+ SIGNAL_TO_EXIT_CODE[signal.SIGQUIT] = ExitCode.GRACEFUL_EXIT_SIGQUIT
37
+
35
38
 
36
39
  def register_exit_handlers(
37
40
  event_type: EventType,
@@ -54,23 +57,16 @@ def register_exit_handlers(
54
57
  An optional list of threads that need to be gracefully
55
58
  terminated before exiting.
56
59
  """
57
- default_handlers = {
58
- SIGINT: None,
59
- SIGQUIT: None,
60
- SIGTERM: None,
61
- }
62
-
63
- def graceful_exit_handler( # type: ignore
64
- signalnum,
65
- frame: FrameType, # pylint: disable=unused-argument
66
- ) -> None:
60
+ default_handlers: dict[int, Callable[[int, FrameType], None]] = {}
61
+
62
+ def graceful_exit_handler(signalnum: int, _frame: FrameType) -> None:
67
63
  """Exit handler to be registered with `signal.signal`.
68
64
 
69
65
  When called will reset signal handler to original signal handler from
70
66
  default_handlers.
71
67
  """
72
68
  # Reset to default handler
73
- signal(signalnum, default_handlers[signalnum])
69
+ signal.signal(signalnum, default_handlers[signalnum]) # type: ignore
74
70
 
75
71
  if grpc_servers is not None:
76
72
  for grpc_server in grpc_servers:
@@ -87,15 +83,7 @@ def register_exit_handlers(
87
83
  event_type=event_type,
88
84
  )
89
85
 
90
- default_handlers[SIGINT] = signal( # type: ignore
91
- SIGINT,
92
- graceful_exit_handler, # type: ignore
93
- )
94
- default_handlers[SIGQUIT] = signal( # type: ignore
95
- SIGQUIT,
96
- graceful_exit_handler, # type: ignore
97
- )
98
- default_handlers[SIGTERM] = signal( # type: ignore
99
- SIGTERM,
100
- graceful_exit_handler, # type: ignore
101
- )
86
+ # Register signal handlers
87
+ for sig in SIGNAL_TO_EXIT_CODE:
88
+ default_handler = signal.signal(sig, graceful_exit_handler) # type: ignore
89
+ default_handlers[sig] = default_handler # type: ignore
@@ -19,13 +19,10 @@ import ast
19
19
  import importlib
20
20
  import sys
21
21
  from importlib.util import find_spec
22
- from logging import WARN
23
22
  from pathlib import Path
24
23
  from threading import Lock
25
24
  from typing import Any, Optional, Union
26
25
 
27
- from .logger import log
28
-
29
26
  OBJECT_REF_HELP_STR = """
30
27
  \n\nThe object reference string should have the form <module>:<attribute>. Valid
31
28
  examples include `client:app` and `project.package.module:wrapper.app`. It must
@@ -171,17 +168,6 @@ def load_app( # pylint: disable= too-many-branches
171
168
  # Import the module
172
169
  if module_str not in sys.modules:
173
170
  module = importlib.import_module(module_str)
174
- # Hack: `tabnet` does not work with `importlib.reload`
175
- elif "tabnet" in sys.modules:
176
- log(
177
- WARN,
178
- "Cannot reload module `%s` from disk due to compatibility issues "
179
- "with the `tabnet` library. The module will be loaded from the "
180
- "cache instead. If you experience issues, consider restarting "
181
- "the application.",
182
- module_str,
183
- )
184
- module = sys.modules[module_str]
185
171
  else:
186
172
  module = sys.modules[module_str]
187
173
  _reload_modules(project_dir)
@@ -40,7 +40,7 @@ from flwr.common.args import try_obtain_server_certificates
40
40
  from flwr.common.auth_plugin import ExecAuthPlugin
41
41
  from flwr.common.config import get_flwr_dir, parse_config_args
42
42
  from flwr.common.constant import (
43
- AUTH_TYPE_KEY,
43
+ AUTH_TYPE_YAML_KEY,
44
44
  CLIENT_OCTET,
45
45
  EXEC_API_DEFAULT_SERVER_ADDRESS,
46
46
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
@@ -578,7 +578,7 @@ def _try_obtain_exec_auth_plugin(
578
578
 
579
579
  # Load authentication configuration
580
580
  auth_config: dict[str, Any] = config.get("authentication", {})
581
- auth_type: str = auth_config.get(AUTH_TYPE_KEY, "")
581
+ auth_type: str = auth_config.get(AUTH_TYPE_YAML_KEY, "")
582
582
 
583
583
  # Load authentication plugin
584
584
  try:
@@ -25,6 +25,7 @@ from flwr.common import now
25
25
  from flwr.common.constant import (
26
26
  PUBLIC_KEY_HEADER,
27
27
  SIGNATURE_HEADER,
28
+ SYSTEM_TIME_TOLERANCE,
28
29
  TIMESTAMP_HEADER,
29
30
  TIMESTAMP_TOLERANCE,
30
31
  )
@@ -38,10 +39,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
38
39
  )
39
40
  from flwr.server.superlink.linkstate import LinkStateFactory
40
41
 
42
+ MIN_TIMESTAMP_DIFF = -SYSTEM_TIME_TOLERANCE
43
+ MAX_TIMESTAMP_DIFF = TIMESTAMP_TOLERANCE + SYSTEM_TIME_TOLERANCE
41
44
 
42
- def _unary_unary_rpc_terminator(message: str) -> grpc.RpcMethodHandler:
45
+
46
+ def _unary_unary_rpc_terminator(
47
+ message: str, code: Any = grpc.StatusCode.UNAUTHENTICATED
48
+ ) -> grpc.RpcMethodHandler:
43
49
  def terminate(_request: GrpcMessage, context: grpc.ServicerContext) -> GrpcMessage:
44
- context.abort(grpc.StatusCode.UNAUTHENTICATED, message)
50
+ context.abort(code, message)
45
51
  raise RuntimeError("Should not reach this point") # Make mypy happy
46
52
 
47
53
  return grpc.unary_unary_rpc_method_handler(terminate)
@@ -64,7 +70,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
64
70
  self.state_factory = state_factory
65
71
  self.auto_auth = auto_auth
66
72
 
67
- def intercept_service(
73
+ def intercept_service( # pylint: disable=too-many-return-statements
68
74
  self,
69
75
  continuation: Callable[[Any], Any],
70
76
  handler_call_details: grpc.HandlerCallDetails,
@@ -75,6 +81,13 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
75
81
  metadata sent by the node. Continue RPC call if node is authenticated, else,
76
82
  terminate RPC call by setting context to abort.
77
83
  """
84
+ # Filter out non-Fleet service calls
85
+ if not handler_call_details.method.startswith("/flwr.proto.Fleet/"):
86
+ return _unary_unary_rpc_terminator(
87
+ "This request should be sent to a different service.",
88
+ grpc.StatusCode.FAILED_PRECONDITION,
89
+ )
90
+
78
91
  state = self.state_factory.state()
79
92
  metadata_dict = dict(handler_call_details.invocation_metadata)
80
93
 
@@ -100,7 +113,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
100
113
  current = now()
101
114
  time_diff = current - datetime.datetime.fromisoformat(timestamp_iso)
102
115
  # Abort the RPC call if the timestamp is too old or in the future
103
- if not 0 < time_diff.total_seconds() < TIMESTAMP_TOLERANCE:
116
+ if not MIN_TIMESTAMP_DIFF < time_diff.total_seconds() < MAX_TIMESTAMP_DIFF:
104
117
  return _unary_unary_rpc_terminator("Invalid timestamp")
105
118
 
106
119
  # Continue the RPC call
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes