flwr-nightly 1.26.0.dev20260123__tar.gz → 1.26.0.dev20260126__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 (407) hide show
  1. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/PKG-INFO +1 -1
  2. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/publish.py +18 -44
  3. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/review.py +8 -25
  4. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +3 -6
  5. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/build.py +8 -19
  6. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config/ls.py +8 -13
  7. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config_utils.py +19 -39
  8. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/federation/ls.py +3 -7
  9. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/flower_config.py +28 -47
  10. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/install.py +18 -57
  11. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/log.py +2 -2
  12. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/login/login.py +8 -21
  13. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/ls.py +3 -7
  14. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/new/new.py +9 -29
  15. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/pull.py +3 -7
  16. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run/run.py +6 -15
  17. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/stop.py +5 -17
  18. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/register.py +6 -22
  19. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/unregister.py +3 -13
  20. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/utils.py +64 -114
  21. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/config.py +5 -9
  22. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/constant.py +2 -0
  23. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +4 -4
  24. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/sql_linkstate.py +38 -10
  25. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_servicer.py +11 -12
  26. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/pyproject.toml +1 -1
  27. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/README.md +0 -0
  28. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/__init__.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/__init__.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/error.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/exception.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/message_type.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/metadata.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/user_config.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/__init__.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/__init__.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config/__init__.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config_migration.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/constant.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/example.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/federation/__init__.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/login/__init__.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/new/__init__.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run/__init__.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run_utils.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/__init__.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/ls.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/typing.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/__init__.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/client.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/message_handler/__init__.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/message_handler/message_handler.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/__init__.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/centraldp_mods.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/comms_mods.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/localdp_mod.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/utils.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/numpy_client.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/rest_client/__init__.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/rest_client/connection.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/run_info_store.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/typing.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/__init__.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/client_app.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/__init__.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/typing.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/utils.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/__init__.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/args.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/context.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/differential_privacy.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/differential_privacy_constants.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/dp.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/__init__.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit_code.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit_handler.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/signal_handler.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/grpc.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable_utils.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/logger.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/message.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/object_ref.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/parameter.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/__init__.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/array.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/arraychunk.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/arrayrecord.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/configrecord.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/conversion_utils.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/metricrecord.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/recorddict.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/typeddict.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/recorddict_compat.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/retry_invoker.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/serde.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/serde_utils.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/telemetry.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/typing.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/__init__.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/__init__.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/app.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/common/__init__.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/common/constant.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/server/__init__.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/server/app.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/simulation/__init__.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/__init__.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2.pyi +0 -0
  142. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  144. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  146. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  148. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2.pyi +0 -0
  150. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2.pyi +0 -0
  154. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2.py +0 -0
  157. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2.pyi +0 -0
  158. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2.py +0 -0
  161. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2.pyi +0 -0
  162. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2.py +0 -0
  165. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2.pyi +0 -0
  166. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  169. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  170. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2.py +0 -0
  173. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  174. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2.py +0 -0
  177. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2.pyi +0 -0
  178. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2.py +0 -0
  181. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2.pyi +0 -0
  182. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2.py +0 -0
  185. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2.pyi +0 -0
  186. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2.py +0 -0
  189. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  190. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2.py +0 -0
  193. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2.pyi +0 -0
  194. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2.py +0 -0
  197. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  198. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2.py +0 -0
  201. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  202. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2.py +0 -0
  205. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2.pyi +0 -0
  206. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/py.typed +0 -0
  209. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/__init__.py +0 -0
  210. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/app.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/client_manager.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/client_proxy.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/__init__.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/app.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/app_utils.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/legacy_context.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/criterion.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/__init__.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/grid.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/grpc_grid.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/inmemory_grid.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/history.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/run_serverapp.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server_app.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server_config.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp/__init__.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp/app.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp_components.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/__init__.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/aggregate.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/bulyan.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedadagrad.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedadam.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavg.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavg_android.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavgm.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedmedian.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedopt.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedprox.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedyogi.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/krum.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/qfedavg.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/strategy.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/__init__.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/utils.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/typing.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/__init__.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/tensorboard.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/validator.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/__init__.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/constant.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/default_workflows.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/__init__.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/exception.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/__init__.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/krum.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/result.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/strategy.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/__init__.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/app.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/legacy_app.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/utils.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/run_simulation.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/simulationio_connection.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/__init__.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/address.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/app_utils.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/cli/__init__.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/constant.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/__init__.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/corestate.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/__init__.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/date.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/__init__.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/ffs.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/heartbeat.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/__init__.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/object_store.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/sql_object_store.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/__init__.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/sql_mixin.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/__init__.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/README.md +0 -0
  365. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/__init__.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/__init__.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/utils.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/version.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/__init__.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/__init__.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/federation_manager.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/__init__.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/__init__.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/__init__.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/__init__.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/runtime/__init__.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/__init__.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/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.26.0.dev20260123
3
+ Version: 1.26.0.dev20260126
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
@@ -19,6 +19,7 @@ from contextlib import ExitStack
19
19
  from pathlib import Path
20
20
  from typing import IO, Annotated
21
21
 
22
+ import click
22
23
  import requests
23
24
  import typer
24
25
  from requests import Response
@@ -62,12 +63,7 @@ def publish(
62
63
  auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
63
64
  auth_plugin.load_tokens()
64
65
  if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
65
- typer.secho(
66
- "❌ Please log in before publishing app.",
67
- fg=typer.colors.RED,
68
- err=True,
69
- )
70
- raise typer.Exit(code=1)
66
+ raise click.ClickException("Please log in before publishing app.")
71
67
 
72
68
  # Load token from the plugin
73
69
  token = auth_plugin.access_token
@@ -82,19 +78,17 @@ def publish(
82
78
  try:
83
79
  resp = _post_files(files_param, token)
84
80
  except requests.RequestException as err:
85
- typer.secho(f"Network error: {err}", fg=typer.colors.RED, err=True)
86
- raise typer.Exit(code=1) from err
81
+ raise click.ClickException(f"Network error: {err}") from err
87
82
 
88
83
  if resp.ok:
89
84
  typer.secho("🎊 Upload successful", fg=typer.colors.GREEN, bold=True)
90
85
  return # success
91
86
 
92
87
  # Error path:
93
- msg = f"Upload failed with status {resp.status_code}"
88
+ msg = f"Upload failed with status {resp.status_code}"
94
89
  if resp.text:
95
90
  msg += f": {resp.text}"
96
- typer.secho(msg, fg=typer.colors.RED, err=True)
97
- raise typer.Exit(code=1)
91
+ raise click.ClickException(msg)
98
92
 
99
93
 
100
94
  def _depth_of(relative_path_to_root: Path) -> int:
@@ -138,14 +132,9 @@ def _collect_file_paths(root: Path) -> list[Path]:
138
132
 
139
133
  # Check max depth
140
134
  if _depth_of(relative_path) > MAX_DIR_DEPTH:
141
- typer.secho(
142
- f"Error: '{path}' "
143
- f"exceeds the maximum directory depth "
144
- f"of {MAX_DIR_DEPTH}.",
145
- fg=typer.colors.RED,
146
- err=True,
135
+ raise click.ClickException(
136
+ f"'{path}' exceeds the maximum directory depth of {MAX_DIR_DEPTH}."
147
137
  )
148
- raise typer.Exit(code=2)
149
138
 
150
139
  file_paths.append(path)
151
140
 
@@ -160,21 +149,15 @@ def _validate_files(file_paths: list[Path]) -> None:
160
149
  Checks file count, individual file size, total size, and UTF-8 encoding.
161
150
  """
162
151
  if len(file_paths) == 0:
163
- typer.secho(
152
+ raise click.ClickException(
164
153
  "Nothing to upload: no files matched after applying .gitignore and "
165
- "allowed extensions.",
166
- fg=typer.colors.RED,
167
- err=True,
154
+ "allowed extensions."
168
155
  )
169
- raise typer.Exit(code=2)
170
156
 
171
157
  if len(file_paths) > MAX_FILE_COUNT:
172
- typer.secho(
173
- f"Too many files: {len(file_paths)} > allowed maximum of {MAX_FILE_COUNT}.",
174
- fg=typer.colors.RED,
175
- err=True,
158
+ raise click.ClickException(
159
+ f"Too many files: {len(file_paths)} > allowed maximum of {MAX_FILE_COUNT}."
176
160
  )
177
- raise typer.Exit(code=2)
178
161
 
179
162
  # Calculate files size
180
163
  total_size = 0
@@ -184,34 +167,25 @@ def _validate_files(file_paths: list[Path]) -> None:
184
167
 
185
168
  # Check single file size
186
169
  if file_size > MAX_FILE_BYTES:
187
- typer.secho(
170
+ raise click.ClickException(
188
171
  f"File too large: '{path.as_posix()}' is {file_size:,} bytes, "
189
- f"exceeding the per-file limit of {MAX_FILE_BYTES:,} bytes.",
190
- fg=typer.colors.RED,
191
- err=True,
172
+ f"exceeding the per-file limit of {MAX_FILE_BYTES:,} bytes."
192
173
  )
193
- raise typer.Exit(code=2)
194
174
 
195
175
  # Ensure we can decode as UTF-8.
196
176
  try:
197
177
  path.read_text(encoding=UTF8)
198
178
  except UnicodeDecodeError as err:
199
- typer.secho(
200
- f"Encoding error: '{path}' is not UTF-8 encoded.",
201
- fg=typer.colors.RED,
202
- err=True,
203
- )
204
- raise typer.Exit(code=2) from err
179
+ raise click.ClickException(
180
+ f"Encoding error: '{path}' is not UTF-8 encoded."
181
+ ) from err
205
182
 
206
183
  # Check total files size
207
184
  if total_size > MAX_TOTAL_BYTES:
208
- typer.secho(
185
+ raise click.ClickException(
209
186
  "Total size of all files is too large: "
210
- f"{total_size:,} bytes > {MAX_TOTAL_BYTES:,} bytes.",
211
- fg=typer.colors.RED,
212
- err=True,
187
+ f"{total_size:,} bytes > {MAX_TOTAL_BYTES:,} bytes."
213
188
  )
214
- raise typer.Exit(code=2)
215
189
 
216
190
  # Print validation passed prompt
217
191
  typer.echo(typer.style("✅ Validation passed", fg=typer.colors.GREEN, bold=True))
@@ -21,6 +21,7 @@ import re
21
21
  from pathlib import Path
22
22
  from typing import Annotated
23
23
 
24
+ import click
24
25
  import requests
25
26
  import typer
26
27
  from cryptography.exceptions import UnsupportedAlgorithm
@@ -60,12 +61,7 @@ def review(
60
61
 
61
62
  auth_plugin.load_tokens()
62
63
  if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
63
- typer.secho(
64
- "❌ Please log in before reviewing app.",
65
- fg=typer.colors.RED,
66
- err=True,
67
- )
68
- raise typer.Exit(code=1)
64
+ raise click.ClickException("Please log in before reviewing app.")
69
65
 
70
66
  # Load token from the plugin
71
67
  token = auth_plugin.access_token
@@ -74,8 +70,7 @@ def review(
74
70
  try:
75
71
  app_id, app_version = parse_app_spec(app_spec)
76
72
  except ValueError as e:
77
- typer.secho(f"❌ {e}", fg=typer.colors.RED, err=True)
78
- raise typer.Exit(code=1) from e
73
+ raise click.ClickException(str(e)) from e
79
74
 
80
75
  # Download FAB
81
76
  typer.secho("Downloading FAB... ", fg=typer.colors.BLUE)
@@ -83,8 +78,7 @@ def review(
83
78
  try:
84
79
  presigned_url, _ = request_download_link(app_id, app_version, url, "fab_url")
85
80
  except ValueError as e:
86
- typer.secho(f"❌ {e}", fg=typer.colors.RED, err=True)
87
- raise typer.Exit(code=1) from e
81
+ raise click.ClickException(str(e)) from e
88
82
 
89
83
  fab_bytes = _download_fab(presigned_url)
90
84
 
@@ -170,12 +164,7 @@ def _download_fab(url: str) -> bytes:
170
164
  r = requests.get(url, timeout=60)
171
165
  r.raise_for_status()
172
166
  except requests.RequestException as e:
173
- typer.secho(
174
- f"❌ FAB download failed: {e}",
175
- fg=typer.colors.RED,
176
- err=True,
177
- )
178
- raise typer.Exit(code=1) from e
167
+ raise click.ClickException(f"FAB download failed: {e}") from e
179
168
  return r.content
180
169
 
181
170
 
@@ -209,20 +198,14 @@ def _submit_review(
209
198
  try:
210
199
  resp = requests.post(url, headers=headers, json=payload, timeout=120)
211
200
  except requests.RequestException as e:
212
- typer.secho(
213
- f"❌ Network error while submitting review: {e}",
214
- fg=typer.colors.RED,
215
- err=True,
216
- )
217
- raise typer.Exit(code=1) from e
201
+ raise click.ClickException(f"Network error while submitting review: {e}") from e
218
202
 
219
203
  if resp.ok:
220
204
  typer.secho("🎊 Review submitted", fg=typer.colors.GREEN, bold=True)
221
205
  return
222
206
 
223
207
  # Error path:
224
- msg = f"Review submission failed (HTTP {resp.status_code})"
208
+ msg = f"Review submission failed (HTTP {resp.status_code})"
225
209
  if resp.text:
226
210
  msg += f": {resp.text}"
227
- typer.secho(msg, fg=typer.colors.RED, err=True)
228
- raise typer.Exit(code=1)
211
+ raise click.ClickException(msg)
@@ -19,6 +19,7 @@ import time
19
19
  import webbrowser
20
20
  from collections.abc import Sequence
21
21
 
22
+ import click
22
23
  import typer
23
24
 
24
25
  from flwr.cli.constant import (
@@ -137,13 +138,9 @@ class OidcCliPlugin(CliAuthPlugin):
137
138
  ) -> Sequence[tuple[str, str | bytes]]:
138
139
  """Write authentication tokens to the provided metadata."""
139
140
  if self.access_token is None or self.refresh_token is None:
140
- typer.secho(
141
- "Missing authentication tokens. Please login first.",
142
- fg=typer.colors.RED,
143
- bold=True,
144
- err=True,
141
+ raise click.ClickException(
142
+ "Missing authentication tokens. Please login first."
145
143
  )
146
- raise typer.Exit(code=1)
147
144
 
148
145
  return list(metadata) + [
149
146
  (ACCESS_TOKEN_KEY, self.access_token),
@@ -21,6 +21,7 @@ from io import BytesIO
21
21
  from pathlib import Path
22
22
  from typing import Annotated, Any
23
23
 
24
+ import click
24
25
  import pathspec
25
26
  import tomli
26
27
  import tomli_w
@@ -107,35 +108,23 @@ def build(
107
108
 
108
109
  app = app.resolve()
109
110
  if not app.is_dir():
110
- typer.secho(
111
- f"The path {app} is not a valid path to a Flower app.",
112
- fg=typer.colors.RED,
113
- bold=True,
114
- err=True,
111
+ raise click.ClickException(
112
+ f"The path {app} is not a valid path to a Flower app."
115
113
  )
116
- raise typer.Exit(code=1)
117
114
 
118
115
  if not is_valid_project_name(app.name):
119
- typer.secho(
120
- f"The project name {app.name} is invalid, "
116
+ raise click.ClickException(
117
+ f"The project name {app.name} is invalid, "
121
118
  "a valid project name must start with a letter, "
122
- "and can only contain letters, digits, and hyphens.",
123
- fg=typer.colors.RED,
124
- bold=True,
125
- err=True,
119
+ "and can only contain letters, digits, and hyphens."
126
120
  )
127
- raise typer.Exit(code=1)
128
121
 
129
122
  config, errors, warnings = load_and_validate(app / "pyproject.toml")
130
123
  if config is None:
131
- typer.secho(
124
+ raise click.ClickException(
132
125
  "Project configuration could not be loaded.\npyproject.toml is invalid:\n"
133
- + "\n".join([f"- {line}" for line in errors]),
134
- fg=typer.colors.RED,
135
- bold=True,
136
- err=True,
126
+ + "\n".join([f"- {line}" for line in errors])
137
127
  )
138
- raise typer.Exit(code=1)
139
128
 
140
129
  if warnings:
141
130
  typer.secho(
@@ -19,6 +19,7 @@ import io
19
19
  import json
20
20
  from typing import Annotated
21
21
 
22
+ import click
22
23
  import typer
23
24
  from rich.console import Console
24
25
 
@@ -66,6 +67,8 @@ def ls(
66
67
  }
67
68
  Console().print_json(json.dumps(conn))
68
69
  else:
70
+ typer.secho("Flower Config file: ", fg=typer.colors.BLUE, nl=False)
71
+ typer.secho(f"{config_path}", fg=typer.colors.GREEN)
69
72
  typer.secho("SuperLink connections:", fg=typer.colors.BLUE)
70
73
  # List SuperLink connections and highlight default
71
74
  for k in connection_names:
@@ -77,26 +80,18 @@ def ls(
77
80
  nl=False,
78
81
  )
79
82
  typer.echo()
80
- except typer.Exit as err:
81
- # log the error if json format requested
82
- # else do nothing since it will be logged by typer
83
- if suppress_output:
84
- restore_output()
85
- e_message = captured_output.getvalue()
86
- print_json_error(e_message, err)
87
83
 
88
84
  except Exception as err: # pylint: disable=broad-except
85
+ # log the error if json format requested
89
86
  if suppress_output:
90
87
  restore_output()
91
88
  e_message = captured_output.getvalue()
92
89
  print_json_error(e_message, err)
93
90
  else:
94
- typer.secho(
95
- f"An unexpected error occurred while listing the SuperLink "
96
- f"connections in the Flower configuration file ({config_path}): {err}",
97
- fg=typer.colors.RED,
98
- err=True,
99
- )
91
+ raise click.ClickException(
92
+ f"An unexpected error occurred while listing the SuperLink "
93
+ f"connections in the Flower configuration file ({config_path}): {err}"
94
+ ) from err
100
95
 
101
96
  finally:
102
97
  if suppress_output:
@@ -18,8 +18,8 @@
18
18
  from pathlib import Path
19
19
  from typing import Any
20
20
 
21
+ import click
21
22
  import tomli
22
- import typer
23
23
 
24
24
  from flwr.cli.typing import SuperLinkConnection
25
25
  from flwr.common.config import (
@@ -137,22 +137,18 @@ def validate_federation_in_project_config(
137
137
 
138
138
  Raises
139
139
  ------
140
- typer.Exit
140
+ click.ClickException
141
141
  If no federation name provided and no default found, or if federation
142
142
  doesn't exist in config.
143
143
  """
144
144
  federation = federation or config["tool"]["flwr"]["federations"].get("default")
145
145
 
146
146
  if federation is None:
147
- typer.secho(
148
- "No federation name was provided and the project's `pyproject.toml` "
147
+ raise click.ClickException(
148
+ "No federation name was provided and the project's `pyproject.toml` "
149
149
  "doesn't declare a default federation (with an Control API address or an "
150
- "`options.num-supernodes` value).",
151
- fg=typer.colors.RED,
152
- bold=True,
153
- err=True,
150
+ "`options.num-supernodes` value)."
154
151
  )
155
- raise typer.Exit(code=1)
156
152
 
157
153
  # Validate the federation exists in the configuration
158
154
  federation_config = config["tool"]["flwr"]["federations"].get(federation)
@@ -160,15 +156,11 @@ def validate_federation_in_project_config(
160
156
  available_feds = {
161
157
  fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
162
158
  }
163
- typer.secho(
164
- f"There is no `{federation}` federation declared in the "
159
+ raise click.ClickException(
160
+ f"There is no `{federation}` federation declared in the "
165
161
  "`pyproject.toml`.\n The following federations were found:\n\n"
166
- + "\n".join(available_feds),
167
- fg=typer.colors.RED,
168
- bold=True,
169
- err=True,
162
+ + "\n".join(available_feds)
170
163
  )
171
- raise typer.Exit(code=1)
172
164
 
173
165
  # Override the federation configuration if provided
174
166
  if overrides:
@@ -198,32 +190,24 @@ def load_certificate_in_connection(
198
190
  ------
199
191
  ValueError
200
192
  If required TLS settings are missing.
201
- typer.Exit
193
+ click.ClickException
202
194
  If the configuration is invalid or the certificate file cannot be read.
203
195
  """
204
196
  # Process root certificates
205
197
  if root_certificates := connection.root_certificates:
206
198
  if connection.insecure:
207
- typer.secho(
208
- "`root-certificates` were provided but the `insecure` parameter "
209
- "is set to `True`.",
210
- fg=typer.colors.RED,
211
- bold=True,
212
- err=True,
199
+ raise click.ClickException(
200
+ "`root-certificates` were provided but the `insecure` parameter "
201
+ "is set to `True`."
213
202
  )
214
- raise typer.Exit(code=1)
215
203
 
216
204
  # TLS is enabled with self-signed certificates: attempt to read the file
217
205
  try:
218
206
  root_certificates_bytes = Path(root_certificates).read_bytes()
219
207
  except Exception as e:
220
- typer.secho(
221
- f"Failed to read certificate file `{root_certificates}`: {e}",
222
- fg=typer.colors.RED,
223
- bold=True,
224
- err=True,
225
- )
226
- raise typer.Exit(code=1) from e
208
+ raise click.ClickException(
209
+ f"Failed to read certificate file `{root_certificates}`: {e}"
210
+ ) from e
227
211
  else:
228
212
  root_certificates_bytes = None
229
213
 
@@ -245,7 +229,7 @@ def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
245
229
 
246
230
  Raises
247
231
  ------
248
- typer.Exit
232
+ click.ClickException
249
233
  If insecure value is not a boolean type.
250
234
  """
251
235
  insecure_value = federation_config.get("insecure")
@@ -255,11 +239,7 @@ def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
255
239
  return False
256
240
  if isinstance(insecure_value, bool):
257
241
  return insecure_value
258
- typer.secho(
259
- "Invalid type for `insecure`: expected a boolean if provided. "
260
- "(`insecure = true` or `insecure = false`)",
261
- fg=typer.colors.RED,
262
- bold=True,
263
- err=True,
242
+ raise click.ClickException(
243
+ "Invalid type for `insecure`: expected a boolean if provided. "
244
+ "(`insecure = true` or `insecure = false`)"
264
245
  )
265
- raise typer.Exit(code=1)
@@ -18,6 +18,7 @@
18
18
  import io
19
19
  from typing import Annotated, Any
20
20
 
21
+ import click
21
22
  import typer
22
23
  from rich.console import Console
23
24
  from rich.table import Table
@@ -112,18 +113,13 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
112
113
  finally:
113
114
  if channel:
114
115
  channel.close()
115
- except (typer.Exit, Exception) as err: # pylint: disable=broad-except
116
+ except Exception as err: # pylint: disable=broad-except
116
117
  if suppress_output:
117
118
  restore_output()
118
119
  e_message = captured_output.getvalue()
119
120
  print_json_error(e_message, err)
120
121
  else:
121
- typer.secho(
122
- f"{err}",
123
- fg=typer.colors.RED,
124
- bold=True,
125
- err=True,
126
- )
122
+ raise click.ClickException(str(err)) from None
127
123
  finally:
128
124
  if suppress_output:
129
125
  restore_output()
@@ -19,6 +19,7 @@ import re
19
19
  from pathlib import Path
20
20
  from typing import Any, cast
21
21
 
22
+ import click
22
23
  import tomli
23
24
  import tomli_w
24
25
  import typer
@@ -251,7 +252,7 @@ def read_superlink_connection(
251
252
 
252
253
  Raises
253
254
  ------
254
- typer.Exit
255
+ click.ClickException
255
256
  Raised if the configuration file is corrupted, or if the requested
256
257
  connection (or default) cannot be found.
257
258
  """
@@ -266,56 +267,42 @@ def read_superlink_connection(
266
267
 
267
268
  # Exit when no connection name is available
268
269
  if connection_name is None:
269
- typer.secho(
270
- "No SuperLink connection set. A SuperLink connection needs to be "
270
+ raise click.ClickException(
271
+ "No SuperLink connection set. A SuperLink connection needs to be "
271
272
  "provided or one must be set as default in the Flower "
272
273
  f"configuration file ({config_path}). Specify a default SuperLink "
273
274
  "connection by adding: \n\n[superlink]\ndefault = 'connection_name'\n\n"
274
- f"to the Flower configuration file ({config_path}).",
275
- fg=typer.colors.RED,
276
- err=True,
275
+ f"to the Flower configuration file ({config_path})."
277
276
  )
278
- raise typer.Exit(code=1)
279
277
 
280
278
  # Try to find the connection with the given name
281
279
  if connection_name not in superlink_config:
282
- typer.secho(
283
- f"SuperLink connection '{connection_name}' not found in the "
284
- f"Flower configuration file ({config_path}).",
285
- fg=typer.colors.RED,
286
- err=True,
280
+ msg = (
281
+ f"SuperLink connection '{connection_name}' not found in the "
282
+ f"Flower configuration file ({config_path})."
287
283
  )
288
284
  # If default was used, show a specific error message
289
285
  if connection_name == superlink_config.get(
290
286
  SuperLinkConnectionTomlKey.DEFAULT
291
287
  ):
292
- typer.secho(
293
- f"Please check that the default connection '{connection_name}' "
294
- "is defined in the [superlink] section.",
295
- fg=typer.colors.RED,
296
- err=True,
288
+ msg += (
289
+ f"\nPlease check that the default connection '{connection_name}' "
290
+ "is defined in the [superlink] section."
297
291
  )
298
- raise typer.Exit(code=1)
292
+ raise click.ClickException(msg)
299
293
 
300
294
  conn_dict = superlink_config[connection_name]
301
295
  return parse_superlink_connection(conn_dict, connection_name)
302
296
 
303
297
  except ValueError as err:
304
- typer.secho(
305
- f"Failed to parse the Flower configuration file ({config_path}). "
306
- f"{err}",
307
- fg=typer.colors.RED,
308
- err=True,
309
- )
310
- raise typer.Exit(code=1) from err
298
+ raise click.ClickException(
299
+ f"Failed to parse the Flower configuration file ({config_path}). {err}"
300
+ ) from err
311
301
  except Exception as err:
312
- typer.secho(
313
- f"An unexpected error occurred while reading the Flower configuration "
314
- f"file ({config_path}). {err}",
315
- fg=typer.colors.RED,
316
- err=True,
317
- )
318
- raise typer.Exit(code=1) from err
302
+ raise click.ClickException(
303
+ f"An unexpected error occurred while reading the Flower configuration "
304
+ f"file ({config_path}). {err}"
305
+ ) from err
319
306
 
320
307
 
321
308
  def write_superlink_connection(connection: SuperLinkConnection) -> None:
@@ -328,7 +315,7 @@ def write_superlink_connection(connection: SuperLinkConnection) -> None:
328
315
 
329
316
  Raises
330
317
  ------
331
- typer.Exit
318
+ click.ClickException
332
319
  Raised if the configuration file cannot be read or written.
333
320
  """
334
321
  toml_dict, _ = read_flower_config()
@@ -358,13 +345,10 @@ def set_default_superlink_connection(connection_name: str) -> None:
358
345
 
359
346
  # Check if the connection exists
360
347
  if connection_name not in superlink_config:
361
- typer.secho(
362
- f"SuperLink connection '{connection_name}' not found in the Flower "
363
- "configuration file. Cannot set as default.",
364
- fg=typer.colors.RED,
365
- err=True,
348
+ raise click.ClickException(
349
+ f"SuperLink connection '{connection_name}' not found in the Flower "
350
+ "configuration file. Cannot set as default."
366
351
  )
367
- raise typer.Exit(code=1)
368
352
 
369
353
  # Set default connection
370
354
  superlink_config[SuperLinkConnectionTomlKey.DEFAULT] = connection_name
@@ -384,7 +368,7 @@ def read_flower_config() -> tuple[dict[str, Any], Path]:
384
368
 
385
369
  Raises
386
370
  ------
387
- typer.Exit
371
+ click.ClickException
388
372
  Raised if the configuration file is corrupted.
389
373
  """
390
374
  init_flwr_config()
@@ -396,13 +380,10 @@ def read_flower_config() -> tuple[dict[str, Any], Path]:
396
380
  return tomli.load(file), config_path
397
381
 
398
382
  except tomli.TOMLDecodeError as err:
399
- typer.secho(
400
- f"Failed to read the Flower configuration file ({config_path}). "
401
- "Please ensure it is valid TOML.",
402
- fg=typer.colors.RED,
403
- err=True,
404
- )
405
- raise typer.Exit(code=1) from err
383
+ raise click.ClickException(
384
+ f"Failed to read the Flower configuration file ({config_path}). "
385
+ "Please ensure it is valid TOML."
386
+ ) from err
406
387
 
407
388
 
408
389
  # This function may be subject to change once we introduce more configuration