flwr-nightly 1.26.0.dev20260126__tar.gz → 1.26.0.dev20260128__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 (413) hide show
  1. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/PKG-INFO +2 -1
  2. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app.py +0 -2
  3. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config/ls.py +1 -1
  4. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config_migration.py +4 -4
  5. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/constant.py +0 -3
  6. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/federation/ls.py +1 -1
  7. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/flower_config.py +0 -4
  8. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/login/login.py +0 -8
  9. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/ls.py +1 -1
  10. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/ls.py +1 -1
  11. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/typing.py +10 -24
  12. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/utils.py +7 -3
  13. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit_code.py +6 -0
  14. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/typing.py +2 -0
  15. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2.py +5 -3
  16. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2.pyi +23 -1
  17. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/app.py +4 -11
  18. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +2 -1
  19. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/address.py +9 -0
  20. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/app_utils.py +2 -1
  21. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/constant.py +3 -0
  22. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/sql_mixin.py +2 -2
  23. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/__init__.py +15 -0
  24. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/env.py +81 -0
  25. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/script.py.mako +43 -0
  26. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/utils.py +49 -0
  27. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/versions/__init__.py +15 -0
  28. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/versions/rev_2026_01_28_initialize_migration_of_state_tables.py +200 -0
  29. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/README.md +2 -6
  30. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/utils.py +21 -0
  31. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/noop_federation_manager.py +3 -1
  32. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/start_client_internal.py +5 -2
  33. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/pyproject.toml +3 -1
  34. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/README.md +0 -0
  35. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/__init__.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/__init__.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/error.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/exception.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/message_type.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/metadata.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/user_config.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/__init__.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/__init__.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/publish.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/review.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/build.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config/__init__.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config_utils.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/example.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/federation/__init__.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/install.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/log.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/login/__init__.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/new/__init__.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/new/new.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/pull.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run/__init__.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run/run.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run_utils.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/stop.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/__init__.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/register.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/unregister.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/__init__.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/client.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/message_handler/__init__.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/message_handler/message_handler.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/__init__.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/centraldp_mods.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/comms_mods.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/localdp_mod.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/utils.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/numpy_client.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/rest_client/__init__.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/rest_client/connection.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/run_info_store.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/typing.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/__init__.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/client_app.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/__init__.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/typing.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/utils.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/__init__.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/args.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/config.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/constant.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/context.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/differential_privacy.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/differential_privacy_constants.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/dp.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/__init__.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit_handler.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/signal_handler.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/grpc.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable_utils.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/logger.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/message.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/object_ref.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/parameter.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/__init__.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/array.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/arraychunk.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/arrayrecord.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/configrecord.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/conversion_utils.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/metricrecord.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/recorddict.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/typeddict.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/recorddict_compat.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/retry_invoker.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/serde.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/serde_utils.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/telemetry.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/__init__.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/__init__.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/app.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/common/__init__.py +0 -0
  150. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/common/constant.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/server/__init__.py +0 -0
  152. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/server/app.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/simulation/__init__.py +0 -0
  154. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/__init__.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2.py +0 -0
  156. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2.pyi +0 -0
  157. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  158. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  159. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2.py +0 -0
  160. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  161. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  162. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  163. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2.py +0 -0
  164. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2.pyi +0 -0
  165. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2_grpc.py +0 -0
  166. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  167. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2.py +0 -0
  168. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2.pyi +0 -0
  169. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2_grpc.py +0 -0
  170. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  171. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2.py +0 -0
  172. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2.pyi +0 -0
  173. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  174. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  175. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2.py +0 -0
  178. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2.pyi +0 -0
  179. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  182. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  183. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2.py +0 -0
  186. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  187. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2.py +0 -0
  190. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2.pyi +0 -0
  191. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2.py +0 -0
  194. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2.pyi +0 -0
  195. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2.py +0 -0
  198. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2.pyi +0 -0
  199. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2.py +0 -0
  202. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  203. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2.py +0 -0
  206. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2.pyi +0 -0
  207. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2.py +0 -0
  210. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  211. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  213. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  215. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  217. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2.pyi +0 -0
  219. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  221. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/py.typed +0 -0
  222. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/__init__.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/client_manager.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/client_proxy.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/__init__.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/app.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/app_utils.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/legacy_context.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/criterion.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/__init__.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/grid.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/grpc_grid.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/inmemory_grid.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/history.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/run_serverapp.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server_app.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server_config.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp/__init__.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp/app.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp_components.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/__init__.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/aggregate.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/bulyan.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedadagrad.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedadam.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavg.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavg_android.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavgm.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedmedian.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedopt.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedprox.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedyogi.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/krum.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/qfedavg.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/strategy.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/__init__.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/utils.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/typing.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/__init__.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/tensorboard.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/validator.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/__init__.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/constant.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/default_workflows.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/__init__.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/exception.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/__init__.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/krum.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/result.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/strategy.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/__init__.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/app.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/legacy_app.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/utils.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/run_simulation.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/simulationio_connection.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/__init__.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/cli/__init__.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/__init__.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/corestate.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/__init__.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/date.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/__init__.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/ffs.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/heartbeat.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/__init__.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/object_store.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/sql_object_store.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/__init__.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/__init__.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/__init__.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/__init__.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/version.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/__init__.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/__init__.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/federation_manager.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/__init__.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/__init__.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/__init__.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/runtime/__init__.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  411. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/__init__.py +0 -0
  412. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  413. {flwr_nightly-1.26.0.dev20260126 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.26.0.dev20260126
3
+ Version: 1.26.0.dev20260128
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
@@ -31,6 +31,7 @@ Classifier: Typing :: Typed
31
31
  Provides-Extra: rest
32
32
  Provides-Extra: simulation
33
33
  Requires-Dist: SQLAlchemy (>=2.0.45,<3.0.0)
34
+ Requires-Dist: alembic (>=1.18.1,<2.0.0)
34
35
  Requires-Dist: click (<8.2.0)
35
36
  Requires-Dist: cryptography (>=44.0.1,<45.0.0)
36
37
  Requires-Dist: grpcio (>=1.70.0,<2.0.0)
@@ -27,7 +27,6 @@ from .app_cmd import review as app_review
27
27
  from .build import build
28
28
  from .config import ls as config_list
29
29
  from .federation import ls as federation_list
30
- from .flower_config import init_flwr_config
31
30
  from .install import install
32
31
  from .log import log
33
32
  from .login import login
@@ -115,7 +114,6 @@ def main(
115
114
  ),
116
115
  ) -> None:
117
116
  """Flower CLI."""
118
- init_flwr_config()
119
117
  if version:
120
118
  typer.secho(f"Flower version: {package_version}", fg="blue")
121
119
  raise typer.Exit()
@@ -40,7 +40,7 @@ def ls(
40
40
  ),
41
41
  ] = CliOutputFormat.DEFAULT,
42
42
  ) -> None:
43
- """List all SuperLink connections."""
43
+ """List all SuperLink connections (alias: ls)."""
44
44
  suppress_output = output_format == CliOutputFormat.JSON
45
45
  captured_output = io.StringIO()
46
46
  config_path = None
@@ -31,7 +31,7 @@ from .flower_config import (
31
31
  )
32
32
 
33
33
  CONFIG_MIGRATION_NOTICE = """
34
- ##################################################################
34
+ #######################################################################
35
35
  # CONFIGURATION MIGRATION NOTICE:
36
36
  #
37
37
  # What was previously called "federation config" for SuperLink
@@ -43,8 +43,8 @@ CONFIG_MIGRATION_NOTICE = """
43
43
  # The entries below are commented out intentionally and are kept
44
44
  # only as a migration reference.
45
45
  #
46
- # Docs: <link to Flower config docs>
47
- ##################################################################
46
+ # Docs: https://flower.ai/docs/framework/ref-flower-configuration.html
47
+ #######################################################################
48
48
 
49
49
  """
50
50
 
@@ -53,7 +53,7 @@ CLI_NOTICE = (
53
53
  + "We detected legacy usage of this command that relies on connection\n"
54
54
  + "settings from your pyproject.toml.\n\n"
55
55
  + "Flower will migrate any relevant settings to the new Flower config.\n\n"
56
- + "Learn more: https://flower.ai/docs\n"
56
+ + "Learn more: https://flower.ai/docs/framework/ref-flower-configuration.html\n"
57
57
  )
58
58
 
59
59
 
@@ -57,7 +57,6 @@ class SuperLinkConnectionTomlKey:
57
57
  ADDRESS = "address"
58
58
  ROOT_CERTIFICATES = "root-certificates"
59
59
  INSECURE = "insecure"
60
- ENABLE_ACCOUNT_AUTH = "enable-account-auth"
61
60
  FEDERATION = "federation"
62
61
  OPTIONS = "options"
63
62
 
@@ -102,8 +101,6 @@ default = "local"
102
101
 
103
102
  [superlink.supergrid]
104
103
  address = "{SUPERGRID_ADDRESS}"
105
- enable-account-auth = true
106
- federation = "YOUR-FEDERATION-HERE"
107
104
 
108
105
  [superlink.local]
109
106
  options.num-supernodes = 10
@@ -68,7 +68,7 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
68
68
  ),
69
69
  ] = None,
70
70
  ) -> None:
71
- """List available federations."""
71
+ """List available federations or details of a specific federation (alias: ls)."""
72
72
  suppress_output = output_format == CliOutputFormat.JSON
73
73
  captured_output = io.StringIO()
74
74
 
@@ -195,9 +195,6 @@ def parse_superlink_connection(
195
195
  address=conn_dict.get(SuperLinkConnectionTomlKey.ADDRESS),
196
196
  root_certificates=conn_dict.get(SuperLinkConnectionTomlKey.ROOT_CERTIFICATES),
197
197
  insecure=conn_dict.get(SuperLinkConnectionTomlKey.INSECURE),
198
- enable_account_auth=conn_dict.get(
199
- SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH
200
- ),
201
198
  federation=conn_dict.get(SuperLinkConnectionTomlKey.FEDERATION),
202
199
  options=simulation_options,
203
200
  )
@@ -221,7 +218,6 @@ def serialize_superlink_connection(connection: SuperLinkConnection) -> dict[str,
221
218
  SuperLinkConnectionTomlKey.ADDRESS: connection.address,
222
219
  SuperLinkConnectionTomlKey.ROOT_CERTIFICATES: connection.root_certificates,
223
220
  SuperLinkConnectionTomlKey.INSECURE: connection._insecure,
224
- SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH: connection._enable_account_auth,
225
221
  SuperLinkConnectionTomlKey.FEDERATION: connection.federation,
226
222
  }
227
223
  # Remove None values
@@ -61,14 +61,6 @@ def login(
61
61
  superlink_connection = read_superlink_connection(superlink)
62
62
  superlink = superlink_connection.name
63
63
 
64
- # Check if `enable-account-auth` is set to `true`
65
- if not superlink_connection.enable_account_auth:
66
- raise click.ClickException(
67
- "Account authentication is not enabled for the SuperLink connection "
68
- f"'{superlink}'. To enable it, set `enable-account-auth = true` "
69
- "in the configuration."
70
- )
71
-
72
64
  # Check if insecure flag is set to `True`
73
65
  if superlink_connection.insecure:
74
66
  raise click.ClickException(
@@ -79,7 +79,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
79
79
  ),
80
80
  ] = CliOutputFormat.DEFAULT,
81
81
  ) -> None:
82
- """List the details of one provided run ID or all runs in a Flower federation.
82
+ """List the details of one provided run ID or all runs (alias: ls).
83
83
 
84
84
  The following details are displayed:
85
85
 
@@ -66,7 +66,7 @@ def ls( # pylint: disable=R0914, R0913, R0917
66
66
  ),
67
67
  ] = False,
68
68
  ) -> None:
69
- """List SuperNodes in the federation."""
69
+ """List SuperNodes in the federation (alias: ls)."""
70
70
  suppress_output = output_format == CliOutputFormat.JSON
71
71
  captured_output = io.StringIO()
72
72
 
@@ -22,6 +22,7 @@ from flwr.cli.constant import (
22
22
  DEFAULT_SIMULATION_BACKEND_NAME,
23
23
  SuperLinkConnectionTomlKey,
24
24
  )
25
+ from flwr.supercore.utils import check_federation_format
25
26
 
26
27
  _ERROR_MSG_FMT = "SuperLinkConnection.%s is None"
27
28
 
@@ -106,8 +107,6 @@ class SuperLinkConnection:
106
107
  insecure : bool (default: False)
107
108
  Whether to use an insecure channel. If True, the
108
109
  connection will not use TLS encryption.
109
- enable_account_auth : bool (default: False)
110
- Whether to enable account authentication.
111
110
  federation : str
112
111
  The name of the federation to interface with.
113
112
  options : SuperLinkSimulationOptions
@@ -118,7 +117,6 @@ class SuperLinkConnection:
118
117
  address: str | None = None
119
118
  root_certificates: str | None = None
120
119
  _insecure: bool | None = None
121
- _enable_account_auth: bool | None = None
122
120
  federation: str | None = None
123
121
  options: SuperLinkSimulationOptions | None = None
124
122
 
@@ -129,7 +127,6 @@ class SuperLinkConnection:
129
127
  address: str | None = None,
130
128
  root_certificates: str | None = None,
131
129
  insecure: bool | None = None,
132
- enable_account_auth: bool | None = None,
133
130
  federation: str | None = None,
134
131
  options: SuperLinkSimulationOptions | None = None,
135
132
  ) -> None:
@@ -137,7 +134,6 @@ class SuperLinkConnection:
137
134
  self.address = address
138
135
  self.root_certificates = root_certificates
139
136
  self._insecure = insecure
140
- self._enable_account_auth = enable_account_auth
141
137
  self.federation = federation
142
138
  self.options = options
143
139
 
@@ -150,13 +146,6 @@ class SuperLinkConnection:
150
146
  return False
151
147
  return self._insecure
152
148
 
153
- @property
154
- def enable_account_auth(self) -> bool:
155
- """Return the enable_account_auth flag or its default (False) if unset."""
156
- if self._enable_account_auth is None:
157
- return False
158
- return self._enable_account_auth
159
-
160
149
  def __post_init__(self) -> None:
161
150
  """Validate SuperLink connection configuration."""
162
151
  err_prefix = f"Invalid value for key '%s' in connection '{self.name}': "
@@ -187,19 +176,16 @@ class SuperLinkConnection:
187
176
  err_prefix % SuperLinkConnectionTomlKey.INSECURE
188
177
  + f"expected bool, but got {type(self._insecure).__name__}."
189
178
  )
190
- if self._enable_account_auth is not None and not isinstance(
191
- self._enable_account_auth, bool
192
- ):
193
- raise ValueError(
194
- err_prefix % SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH
195
- + f"expected bool, but got {type(self._enable_account_auth).__name__}."
196
- )
197
179
 
198
- if self.federation is not None and not isinstance(self.federation, str):
199
- raise ValueError(
200
- err_prefix % SuperLinkConnectionTomlKey.FEDERATION
201
- + f"expected str, but got {type(self.federation).__name__}."
202
- )
180
+ if self.federation is not None:
181
+ if not isinstance(self.federation, str):
182
+ raise ValueError(
183
+ err_prefix % SuperLinkConnectionTomlKey.FEDERATION
184
+ + f"expected str, but got {type(self.federation).__name__}."
185
+ )
186
+
187
+ # Check if the federation string is valid
188
+ check_federation_format(self.federation)
203
189
 
204
190
  # The connection needs to have either an address or options (or both).
205
191
  if self.address is None and self.options is None:
@@ -241,7 +241,9 @@ def require_superlink_address(connection: SuperLinkConnection) -> str:
241
241
  cmd = click.get_current_context().command.name
242
242
  raise click.ClickException(
243
243
  f"`flwr {cmd}` currently works with a SuperLink. Ensure that the "
244
- "correct SuperLink (Control API) address is provided in `pyproject.toml`."
244
+ "correct SuperLink (Control API) address is provided SuperLink connection "
245
+ "you are using. Check your Flower configuration file. You may use `flwr "
246
+ "config list` to see its location in the file system."
245
247
  )
246
248
  return connection.address
247
249
 
@@ -326,8 +328,10 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]: # pylint: disable=too-many-b
326
328
  raise click.ClickException(
327
329
  "The SuperLink cannot process this request. Please verify that "
328
330
  "you set the address to its Control API endpoint correctly in your "
329
- "`pyproject.toml`, and ensure that the Flower versions used by "
330
- "the CLI and SuperLink are compatible."
331
+ "SuperLink connection in your Flower Configuration file. You may use "
332
+ "`flwr config list` to see its location in the file system. "
333
+ "Additonally, ensure that the Flower versions used by the CLI and "
334
+ "SuperLink are compatible."
331
335
  ) from None
332
336
  if e.code() == grpc.StatusCode.PERMISSION_DENIED:
333
337
  # pylint: disable-next=E1101
@@ -33,6 +33,7 @@ class ExitCode:
33
33
  SUPERLINK_LICENSE_MISSING = 102
34
34
  SUPERLINK_LICENSE_URL_INVALID = 103
35
35
  SUPERLINK_INVALID_ARGS = 104
36
+ SUPERLINK_DATABASE_SCHEMA_MISMATCH = 105
36
37
 
37
38
  # ServerApp-specific exit codes (200-299)
38
39
  SERVERAPP_STRATEGY_PRECONDITION_UNMET = 200
@@ -91,6 +92,11 @@ EXIT_CODE_HELP = {
91
92
  "Invalid arguments provided to SuperLink. Use `--help` check for the correct "
92
93
  "usage. Alternatively, check the documentation."
93
94
  ),
95
+ ExitCode.SUPERLINK_DATABASE_SCHEMA_MISMATCH: (
96
+ "The database schema does not match the expected schema for this version of "
97
+ "SuperLink. Please refer to the documentation for guidance on how to resolve "
98
+ "this issue."
99
+ ),
94
100
  # ServerApp-specific exit codes (200-299)
95
101
  ExitCode.SERVERAPP_STRATEGY_PRECONDITION_UNMET: (
96
102
  "The strategy received replies that cannot be aggregated. Please ensure all "
@@ -24,6 +24,7 @@ import numpy as np
24
24
  import numpy.typing as npt
25
25
 
26
26
  from flwr.app.user_config import UserConfig
27
+ from flwr.proto.federation_pb2 import Account # pylint: disable=E0611
27
28
  from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
28
29
 
29
30
  NDArray = npt.NDArray[Any]
@@ -343,5 +344,6 @@ class Federation:
343
344
 
344
345
  name: str
345
346
  member_aids: list[str]
347
+ accounts: list[Account]
346
348
  nodes: list[NodeInfo]
347
349
  runs: list[Run]
@@ -26,13 +26,15 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
26
26
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
27
27
 
28
28
 
29
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"s\n\nFederation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bmember_aids\x18\x02 \x03(\t\x12#\n\x05nodes\x18\x03 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x1d\n\x04runs\x18\x04 \x03(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
29
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"#\n\x07\x41\x63\x63ount\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x9a\x01\n\nFederation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bmember_aids\x18\x02 \x03(\t\x12%\n\x08\x61\x63\x63ounts\x18\x03 \x03(\x0b\x32\x13.flwr.proto.Account\x12#\n\x05nodes\x18\x04 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x1d\n\x04runs\x18\x05 \x03(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
30
30
 
31
31
  _globals = globals()
32
32
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
33
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.federation_pb2', _globals)
34
34
  if not _descriptor._USE_C_DESCRIPTORS:
35
35
  DESCRIPTOR._loaded_options = None
36
- _globals['_FEDERATION']._serialized_start=88
37
- _globals['_FEDERATION']._serialized_end=203
36
+ _globals['_ACCOUNT']._serialized_start=88
37
+ _globals['_ACCOUNT']._serialized_end=123
38
+ _globals['_FEDERATION']._serialized_start=126
39
+ _globals['_FEDERATION']._serialized_end=280
38
40
  # @@protoc_insertion_point(module_scope)
@@ -28,18 +28,39 @@ import typing
28
28
 
29
29
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
30
30
 
31
+ @typing.final
32
+ class Account(google.protobuf.message.Message):
33
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
+
35
+ ID_FIELD_NUMBER: builtins.int
36
+ NAME_FIELD_NUMBER: builtins.int
37
+ id: builtins.str
38
+ name: builtins.str
39
+ def __init__(
40
+ self,
41
+ *,
42
+ id: builtins.str = ...,
43
+ name: builtins.str = ...,
44
+ ) -> None: ...
45
+ def ClearField(self, field_name: typing.Literal["id", b"id", "name", b"name"]) -> None: ...
46
+
47
+ global___Account = Account
48
+
31
49
  @typing.final
32
50
  class Federation(google.protobuf.message.Message):
33
51
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
52
 
35
53
  NAME_FIELD_NUMBER: builtins.int
36
54
  MEMBER_AIDS_FIELD_NUMBER: builtins.int
55
+ ACCOUNTS_FIELD_NUMBER: builtins.int
37
56
  NODES_FIELD_NUMBER: builtins.int
38
57
  RUNS_FIELD_NUMBER: builtins.int
39
58
  name: builtins.str
40
59
  @property
41
60
  def member_aids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
42
61
  @property
62
+ def accounts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Account]: ...
63
+ @property
43
64
  def nodes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.node_pb2.NodeInfo]: ...
44
65
  @property
45
66
  def runs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.run_pb2.Run]: ...
@@ -48,9 +69,10 @@ class Federation(google.protobuf.message.Message):
48
69
  *,
49
70
  name: builtins.str = ...,
50
71
  member_aids: collections.abc.Iterable[builtins.str] | None = ...,
72
+ accounts: collections.abc.Iterable[global___Account] | None = ...,
51
73
  nodes: collections.abc.Iterable[flwr.proto.node_pb2.NodeInfo] | None = ...,
52
74
  runs: collections.abc.Iterable[flwr.proto.run_pb2.Run] | None = ...,
53
75
  ) -> None: ...
54
- def ClearField(self, field_name: typing.Literal["member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
76
+ def ClearField(self, field_name: typing.Literal["accounts", b"accounts", "member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
55
77
 
56
78
  global___Federation = Federation
@@ -36,13 +36,11 @@ from flwr.common.config import get_flwr_dir
36
36
  from flwr.common.constant import (
37
37
  AUTHN_TYPE_YAML_KEY,
38
38
  AUTHZ_TYPE_YAML_KEY,
39
- CLIENT_OCTET,
40
39
  CONTROL_API_DEFAULT_SERVER_ADDRESS,
41
40
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
42
41
  FLEET_API_REST_DEFAULT_ADDRESS,
43
42
  ISOLATION_MODE_PROCESS,
44
43
  ISOLATION_MODE_SUBPROCESS,
45
- SERVER_OCTET,
46
44
  SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
47
45
  SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
48
46
  TRANSPORT_TYPE_GRPC_ADAPTER,
@@ -62,7 +60,7 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
62
60
  )
63
61
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
64
62
  from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
65
- from flwr.supercore.address import parse_address
63
+ from flwr.supercore.address import parse_address, resolve_bind_address
66
64
  from flwr.supercore.constant import FLWR_IN_MEMORY_DB_NAME
67
65
  from flwr.supercore.ffs import FfsFactory
68
66
  from flwr.supercore.grpc_health import add_args_health, run_health_server_grpc_no_tls
@@ -429,16 +427,11 @@ def run_superlink() -> None:
429
427
  raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
430
428
 
431
429
  if args.isolation == ISOLATION_MODE_SUBPROCESS:
432
-
433
- _octet, _colon, _port = serverappio_address.rpartition(":")
434
- io_address = (
435
- f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
430
+ appio_address = resolve_bind_address(
431
+ simulationio_address if is_simulation else serverappio_address
436
432
  )
437
433
  command = ["flower-superexec", "--insecure"]
438
- command += [
439
- "--appio-api-address",
440
- simulationio_address if is_simulation else io_address,
441
- ]
434
+ command += ["--appio-api-address", appio_address]
442
435
  command += [
443
436
  "--plugin-type",
444
437
  ExecPluginType.SIMULATION if is_simulation else ExecPluginType.SERVER_APP,
@@ -321,7 +321,8 @@ def pull_object(
321
321
  if content is not None:
322
322
  object_available = content != b""
323
323
  # Record bytes traffic pulled by SuperNode
324
- state.store_traffic(request.run_id, bytes_sent=len(content), bytes_recv=0)
324
+ if object_available:
325
+ state.store_traffic(request.run_id, bytes_sent=len(content), bytes_recv=0)
325
326
  return PullObjectResponse(
326
327
  object_found=True,
327
328
  object_available=object_available,
@@ -100,3 +100,12 @@ def is_port_in_use(address: str) -> bool:
100
100
  return True
101
101
 
102
102
  return False
103
+
104
+
105
+ def resolve_bind_address(address: str) -> str:
106
+ """Replace bind-all addresses (0.0.0.0, ::) with localhost (127.0.0.1, ::1)."""
107
+ if address.startswith("[::]"):
108
+ return address.replace("[::]", "[::1]", 1)
109
+ if address.startswith("0.0.0.0"):
110
+ return address.replace("0.0.0.0", "127.0.0.1", 1)
111
+ return address
@@ -53,6 +53,7 @@ def start_parent_process_monitor(
53
53
  while True:
54
54
  time.sleep(0.2)
55
55
  if not _pid_exists(parent_pid):
56
- os.kill(os.getpid(), signal.SIGKILL)
56
+ signal.raise_signal(signal.SIGINT)
57
+ break
57
58
 
58
59
  threading.Thread(target=monitor, daemon=True).start()
@@ -25,6 +25,9 @@ EXEC_PLUGIN_SECTION = "exec_plugin"
25
25
  # Flower in-memory Python-based database name
26
26
  FLWR_IN_MEMORY_DB_NAME = ":flwr-in-memory:"
27
27
 
28
+ # Flower in-memory SQLite database URL
29
+ FLWR_IN_MEMORY_SQLITE_DB_URL = "sqlite:///:memory:"
30
+
28
31
  # Constants for Hub
29
32
  APP_ID_PATTERN = r"^@[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$"
30
33
  APP_VERSION_PATTERN = r"^\d+\.\d+\.\d+$"
@@ -29,7 +29,7 @@ from sqlalchemy.exc import SQLAlchemyError
29
29
  from sqlalchemy.orm import Session, sessionmaker
30
30
 
31
31
  from flwr.common.logger import log
32
- from flwr.supercore.constant import SQLITE_PRAGMAS
32
+ from flwr.supercore.constant import FLWR_IN_MEMORY_SQLITE_DB_URL, SQLITE_PRAGMAS
33
33
 
34
34
  _current_session: ContextVar[Session | None] = ContextVar(
35
35
  "current_sqlalchemy_session",
@@ -95,7 +95,7 @@ class SqlMixin(ABC):
95
95
 
96
96
  # Auto-convert file path to SQLAlchemy SQLite URL if needed
97
97
  if database_path == ":memory:":
98
- self.database_url = "sqlite:///:memory:"
98
+ self.database_url = FLWR_IN_MEMORY_SQLITE_DB_URL
99
99
  elif not database_path.startswith("sqlite://"):
100
100
  # Treat as file path, convert to absolute and create SQLite URL
101
101
  abs_path = Path(database_path).resolve()
@@ -0,0 +1,15 @@
1
+ # Copyright 2026 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Alembic helpers and migration environment for SQL state."""
@@ -0,0 +1,81 @@
1
+ # Copyright 2026 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Alembic environment configuration for State migrations."""
16
+
17
+
18
+ from logging.config import fileConfig
19
+
20
+ from alembic import context
21
+ from sqlalchemy import engine_from_config, pool
22
+
23
+ from flwr.supercore.state.alembic.utils import get_combined_metadata
24
+
25
+ # Alembic Config object
26
+ config = context.config # pylint: disable=no-member
27
+
28
+ # Interpret the config file for Python logging
29
+ if config.config_file_name is not None:
30
+ fileConfig(config.config_file_name)
31
+
32
+
33
+ # Target metadata for autogenerate
34
+ target_metadata = get_combined_metadata()
35
+
36
+
37
+ def run_migrations_offline() -> None:
38
+ """Run migrations in 'offline' mode.
39
+
40
+ This configures the context with just a URL and not an Engine, though an Engine is
41
+ acceptable here as well. By skipping the Engine creation we don't even need a DBAPI
42
+ to be available.
43
+
44
+ Calls to context.execute() here emit the given string to the script output.
45
+ """
46
+ url = config.get_main_option("sqlalchemy.url")
47
+ context.configure( # pylint: disable=no-member
48
+ url=url,
49
+ target_metadata=target_metadata,
50
+ literal_binds=True,
51
+ dialect_opts={"paramstyle": "named"},
52
+ )
53
+
54
+ with context.begin_transaction(): # pylint: disable=no-member
55
+ context.run_migrations() # pylint: disable=no-member
56
+
57
+
58
+ def run_migrations_online() -> None:
59
+ """Run migrations in 'online' mode.
60
+
61
+ In this scenario we need to create an Engine and associate a connection with the
62
+ context.
63
+ """
64
+ connectable = engine_from_config(
65
+ config.get_section(config.config_ini_section, {}),
66
+ prefix="sqlalchemy.",
67
+ poolclass=pool.NullPool,
68
+ )
69
+
70
+ with connectable.connect() as connection:
71
+ # pylint: disable-next=no-member
72
+ context.configure(connection=connection, target_metadata=target_metadata)
73
+
74
+ with context.begin_transaction(): # pylint: disable=no-member
75
+ context.run_migrations() # pylint: disable=no-member
76
+
77
+
78
+ if context.is_offline_mode(): # pylint: disable=no-member
79
+ run_migrations_offline()
80
+ else:
81
+ run_migrations_online()
@@ -0,0 +1,43 @@
1
+ # Copyright 2026 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """${message}.
16
+
17
+ Revision ID: ${up_revision}
18
+ Revises: ${down_revision | comma,n}
19
+ Create Date: ${create_date}
20
+ """
21
+ from typing import Sequence, Union
22
+
23
+ from alembic import op
24
+ import sqlalchemy as sa
25
+ ${imports if imports else ""}
26
+
27
+ # pylint: disable=no-member
28
+
29
+ # revision identifiers, used by Alembic.
30
+ revision: str = ${repr(up_revision)}
31
+ down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
32
+ branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
33
+ depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
34
+
35
+
36
+ def upgrade() -> None:
37
+ """Upgrade schema."""
38
+ ${upgrades if upgrades else "pass"}
39
+
40
+
41
+ def downgrade() -> None:
42
+ """Downgrade schema."""
43
+ ${downgrades if downgrades else "pass"}