flwr 1.23.0__py3-none-any.whl → 1.24.0__py3-none-any.whl

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 (292) hide show
  1. flwr/__init__.py +16 -5
  2. flwr/app/error.py +2 -2
  3. flwr/app/exception.py +3 -3
  4. flwr/cli/app.py +19 -0
  5. flwr/cli/app_cmd/__init__.py +23 -0
  6. flwr/cli/app_cmd/publish.py +285 -0
  7. flwr/cli/app_cmd/review.py +252 -0
  8. flwr/cli/auth_plugin/auth_plugin.py +4 -5
  9. flwr/cli/auth_plugin/noop_auth_plugin.py +54 -11
  10. flwr/cli/auth_plugin/oidc_cli_plugin.py +32 -9
  11. flwr/cli/build.py +60 -18
  12. flwr/cli/cli_account_auth_interceptor.py +24 -7
  13. flwr/cli/config_utils.py +101 -13
  14. flwr/cli/federation/__init__.py +24 -0
  15. flwr/cli/federation/ls.py +140 -0
  16. flwr/cli/federation/show.py +317 -0
  17. flwr/cli/install.py +91 -13
  18. flwr/cli/log.py +52 -9
  19. flwr/cli/login/login.py +7 -4
  20. flwr/cli/ls.py +170 -130
  21. flwr/cli/new/new.py +33 -50
  22. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +1 -0
  23. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  24. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  25. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  26. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  27. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  28. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  29. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  30. flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +1 -1
  31. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  32. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +2 -2
  33. flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +1 -1
  34. flwr/cli/pull.py +10 -5
  35. flwr/cli/run/run.py +77 -30
  36. flwr/cli/run_utils.py +130 -0
  37. flwr/cli/stop.py +25 -7
  38. flwr/cli/supernode/ls.py +16 -8
  39. flwr/cli/supernode/register.py +9 -4
  40. flwr/cli/supernode/unregister.py +5 -3
  41. flwr/cli/utils.py +376 -16
  42. flwr/client/__init__.py +1 -1
  43. flwr/client/dpfedavg_numpy_client.py +4 -1
  44. flwr/client/grpc_adapter_client/connection.py +6 -7
  45. flwr/client/grpc_rere_client/connection.py +10 -11
  46. flwr/client/grpc_rere_client/grpc_adapter.py +6 -2
  47. flwr/client/grpc_rere_client/node_auth_client_interceptor.py +2 -1
  48. flwr/client/message_handler/message_handler.py +2 -2
  49. flwr/client/mod/secure_aggregation/secaggplus_mod.py +3 -3
  50. flwr/client/numpy_client.py +1 -1
  51. flwr/client/rest_client/connection.py +12 -14
  52. flwr/client/run_info_store.py +4 -5
  53. flwr/client/typing.py +1 -1
  54. flwr/clientapp/client_app.py +9 -10
  55. flwr/clientapp/mod/centraldp_mods.py +16 -17
  56. flwr/clientapp/mod/localdp_mod.py +8 -9
  57. flwr/clientapp/typing.py +1 -1
  58. flwr/clientapp/utils.py +3 -3
  59. flwr/common/address.py +1 -2
  60. flwr/common/args.py +3 -4
  61. flwr/common/config.py +13 -16
  62. flwr/common/constant.py +5 -2
  63. flwr/common/differential_privacy.py +3 -4
  64. flwr/common/event_log_plugin/event_log_plugin.py +3 -4
  65. flwr/common/exit/exit.py +15 -2
  66. flwr/common/exit/exit_code.py +19 -0
  67. flwr/common/exit/exit_handler.py +6 -2
  68. flwr/common/exit/signal_handler.py +5 -5
  69. flwr/common/grpc.py +6 -6
  70. flwr/common/inflatable_protobuf_utils.py +1 -1
  71. flwr/common/inflatable_utils.py +38 -21
  72. flwr/common/logger.py +19 -19
  73. flwr/common/message.py +4 -4
  74. flwr/common/object_ref.py +7 -7
  75. flwr/common/record/array.py +3 -3
  76. flwr/common/record/arrayrecord.py +18 -30
  77. flwr/common/record/configrecord.py +3 -3
  78. flwr/common/record/recorddict.py +5 -5
  79. flwr/common/record/typeddict.py +9 -2
  80. flwr/common/recorddict_compat.py +7 -10
  81. flwr/common/retry_invoker.py +20 -20
  82. flwr/common/secure_aggregation/ndarrays_arithmetic.py +3 -3
  83. flwr/common/serde.py +5 -4
  84. flwr/common/serde_utils.py +2 -2
  85. flwr/common/telemetry.py +9 -5
  86. flwr/common/typing.py +52 -37
  87. flwr/compat/client/app.py +38 -37
  88. flwr/compat/client/grpc_client/connection.py +11 -11
  89. flwr/compat/server/app.py +5 -6
  90. flwr/proto/appio_pb2.py +13 -3
  91. flwr/proto/appio_pb2.pyi +134 -65
  92. flwr/proto/appio_pb2_grpc.py +20 -0
  93. flwr/proto/appio_pb2_grpc.pyi +27 -0
  94. flwr/proto/clientappio_pb2.py +17 -7
  95. flwr/proto/clientappio_pb2.pyi +15 -0
  96. flwr/proto/clientappio_pb2_grpc.py +206 -40
  97. flwr/proto/clientappio_pb2_grpc.pyi +168 -53
  98. flwr/proto/control_pb2.py +71 -52
  99. flwr/proto/control_pb2.pyi +277 -111
  100. flwr/proto/control_pb2_grpc.py +249 -40
  101. flwr/proto/control_pb2_grpc.pyi +185 -52
  102. flwr/proto/error_pb2.py +13 -3
  103. flwr/proto/error_pb2.pyi +24 -6
  104. flwr/proto/error_pb2_grpc.py +20 -0
  105. flwr/proto/error_pb2_grpc.pyi +27 -0
  106. flwr/proto/fab_pb2.py +14 -4
  107. flwr/proto/fab_pb2.pyi +59 -31
  108. flwr/proto/fab_pb2_grpc.py +20 -0
  109. flwr/proto/fab_pb2_grpc.pyi +27 -0
  110. flwr/proto/federation_pb2.py +38 -0
  111. flwr/proto/federation_pb2.pyi +56 -0
  112. flwr/proto/federation_pb2_grpc.py +24 -0
  113. flwr/proto/federation_pb2_grpc.pyi +31 -0
  114. flwr/proto/fleet_pb2.py +14 -4
  115. flwr/proto/fleet_pb2.pyi +137 -61
  116. flwr/proto/fleet_pb2_grpc.py +189 -48
  117. flwr/proto/fleet_pb2_grpc.pyi +175 -61
  118. flwr/proto/grpcadapter_pb2.py +14 -4
  119. flwr/proto/grpcadapter_pb2.pyi +38 -16
  120. flwr/proto/grpcadapter_pb2_grpc.py +35 -4
  121. flwr/proto/grpcadapter_pb2_grpc.pyi +38 -7
  122. flwr/proto/heartbeat_pb2.py +17 -7
  123. flwr/proto/heartbeat_pb2.pyi +51 -22
  124. flwr/proto/heartbeat_pb2_grpc.py +20 -0
  125. flwr/proto/heartbeat_pb2_grpc.pyi +27 -0
  126. flwr/proto/log_pb2.py +13 -3
  127. flwr/proto/log_pb2.pyi +34 -11
  128. flwr/proto/log_pb2_grpc.py +20 -0
  129. flwr/proto/log_pb2_grpc.pyi +27 -0
  130. flwr/proto/message_pb2.py +15 -5
  131. flwr/proto/message_pb2.pyi +154 -86
  132. flwr/proto/message_pb2_grpc.py +20 -0
  133. flwr/proto/message_pb2_grpc.pyi +27 -0
  134. flwr/proto/node_pb2.py +15 -5
  135. flwr/proto/node_pb2.pyi +50 -25
  136. flwr/proto/node_pb2_grpc.py +20 -0
  137. flwr/proto/node_pb2_grpc.pyi +27 -0
  138. flwr/proto/recorddict_pb2.py +13 -3
  139. flwr/proto/recorddict_pb2.pyi +184 -107
  140. flwr/proto/recorddict_pb2_grpc.py +20 -0
  141. flwr/proto/recorddict_pb2_grpc.pyi +27 -0
  142. flwr/proto/run_pb2.py +40 -31
  143. flwr/proto/run_pb2.pyi +149 -84
  144. flwr/proto/run_pb2_grpc.py +20 -0
  145. flwr/proto/run_pb2_grpc.pyi +27 -0
  146. flwr/proto/serverappio_pb2.py +13 -3
  147. flwr/proto/serverappio_pb2.pyi +32 -8
  148. flwr/proto/serverappio_pb2_grpc.py +246 -65
  149. flwr/proto/serverappio_pb2_grpc.pyi +221 -85
  150. flwr/proto/simulationio_pb2.py +16 -8
  151. flwr/proto/simulationio_pb2.pyi +15 -0
  152. flwr/proto/simulationio_pb2_grpc.py +162 -41
  153. flwr/proto/simulationio_pb2_grpc.pyi +149 -55
  154. flwr/proto/transport_pb2.py +20 -10
  155. flwr/proto/transport_pb2.pyi +249 -160
  156. flwr/proto/transport_pb2_grpc.py +35 -4
  157. flwr/proto/transport_pb2_grpc.pyi +38 -8
  158. flwr/server/app.py +38 -17
  159. flwr/server/client_manager.py +4 -5
  160. flwr/server/client_proxy.py +10 -11
  161. flwr/server/compat/app.py +4 -5
  162. flwr/server/compat/app_utils.py +2 -1
  163. flwr/server/compat/grid_client_proxy.py +10 -12
  164. flwr/server/compat/legacy_context.py +3 -4
  165. flwr/server/fleet_event_log_interceptor.py +2 -1
  166. flwr/server/grid/grid.py +2 -3
  167. flwr/server/grid/grpc_grid.py +10 -8
  168. flwr/server/grid/inmemory_grid.py +4 -4
  169. flwr/server/run_serverapp.py +2 -3
  170. flwr/server/server.py +34 -39
  171. flwr/server/server_app.py +7 -8
  172. flwr/server/server_config.py +1 -2
  173. flwr/server/serverapp/app.py +34 -28
  174. flwr/server/serverapp_components.py +4 -5
  175. flwr/server/strategy/aggregate.py +9 -8
  176. flwr/server/strategy/bulyan.py +13 -11
  177. flwr/server/strategy/dp_adaptive_clipping.py +16 -20
  178. flwr/server/strategy/dp_fixed_clipping.py +12 -17
  179. flwr/server/strategy/dpfedavg_adaptive.py +3 -4
  180. flwr/server/strategy/dpfedavg_fixed.py +6 -10
  181. flwr/server/strategy/fault_tolerant_fedavg.py +14 -13
  182. flwr/server/strategy/fedadagrad.py +18 -14
  183. flwr/server/strategy/fedadam.py +16 -14
  184. flwr/server/strategy/fedavg.py +16 -17
  185. flwr/server/strategy/fedavg_android.py +15 -15
  186. flwr/server/strategy/fedavgm.py +21 -18
  187. flwr/server/strategy/fedmedian.py +2 -3
  188. flwr/server/strategy/fedopt.py +11 -10
  189. flwr/server/strategy/fedprox.py +10 -9
  190. flwr/server/strategy/fedtrimmedavg.py +12 -11
  191. flwr/server/strategy/fedxgb_bagging.py +13 -11
  192. flwr/server/strategy/fedxgb_cyclic.py +6 -6
  193. flwr/server/strategy/fedxgb_nn_avg.py +4 -4
  194. flwr/server/strategy/fedyogi.py +16 -14
  195. flwr/server/strategy/krum.py +12 -11
  196. flwr/server/strategy/qfedavg.py +16 -15
  197. flwr/server/strategy/strategy.py +6 -9
  198. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +2 -1
  199. flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -2
  200. flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +3 -4
  201. flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +10 -12
  202. flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +1 -3
  203. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -4
  204. flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +3 -2
  205. flwr/server/superlink/fleet/message_handler/message_handler.py +34 -28
  206. flwr/server/superlink/fleet/rest_rere/rest_api.py +2 -2
  207. flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
  208. flwr/server/superlink/fleet/vce/backend/raybackend.py +5 -5
  209. flwr/server/superlink/fleet/vce/vce_api.py +15 -9
  210. flwr/server/superlink/linkstate/in_memory_linkstate.py +115 -150
  211. flwr/server/superlink/linkstate/linkstate.py +59 -43
  212. flwr/server/superlink/linkstate/linkstate_factory.py +22 -5
  213. flwr/server/superlink/linkstate/sqlite_linkstate.py +447 -438
  214. flwr/server/superlink/linkstate/utils.py +6 -6
  215. flwr/server/superlink/serverappio/serverappio_grpc.py +1 -2
  216. flwr/server/superlink/serverappio/serverappio_servicer.py +26 -21
  217. flwr/server/superlink/simulation/simulationio_grpc.py +1 -2
  218. flwr/server/superlink/simulation/simulationio_servicer.py +18 -13
  219. flwr/server/superlink/utils.py +4 -6
  220. flwr/server/typing.py +1 -1
  221. flwr/server/utils/tensorboard.py +15 -8
  222. flwr/server/workflow/default_workflows.py +5 -5
  223. flwr/server/workflow/secure_aggregation/secagg_workflow.py +2 -4
  224. flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +8 -8
  225. flwr/serverapp/strategy/bulyan.py +16 -15
  226. flwr/serverapp/strategy/dp_adaptive_clipping.py +12 -11
  227. flwr/serverapp/strategy/dp_fixed_clipping.py +11 -14
  228. flwr/serverapp/strategy/fedadagrad.py +10 -11
  229. flwr/serverapp/strategy/fedadam.py +10 -11
  230. flwr/serverapp/strategy/fedavg.py +9 -10
  231. flwr/serverapp/strategy/fedavgm.py +17 -16
  232. flwr/serverapp/strategy/fedmedian.py +2 -2
  233. flwr/serverapp/strategy/fedopt.py +10 -11
  234. flwr/serverapp/strategy/fedprox.py +7 -8
  235. flwr/serverapp/strategy/fedtrimmedavg.py +9 -9
  236. flwr/serverapp/strategy/fedxgb_bagging.py +3 -3
  237. flwr/serverapp/strategy/fedxgb_cyclic.py +9 -9
  238. flwr/serverapp/strategy/fedyogi.py +9 -11
  239. flwr/serverapp/strategy/krum.py +7 -7
  240. flwr/serverapp/strategy/multikrum.py +9 -9
  241. flwr/serverapp/strategy/qfedavg.py +17 -16
  242. flwr/serverapp/strategy/strategy.py +6 -9
  243. flwr/serverapp/strategy/strategy_utils.py +7 -8
  244. flwr/simulation/app.py +46 -42
  245. flwr/simulation/legacy_app.py +12 -12
  246. flwr/simulation/ray_transport/ray_actor.py +10 -11
  247. flwr/simulation/ray_transport/ray_client_proxy.py +11 -12
  248. flwr/simulation/run_simulation.py +43 -43
  249. flwr/simulation/simulationio_connection.py +4 -4
  250. flwr/supercore/cli/flower_superexec.py +3 -4
  251. flwr/supercore/constant.py +31 -1
  252. flwr/supercore/corestate/corestate.py +24 -3
  253. flwr/supercore/corestate/in_memory_corestate.py +138 -0
  254. flwr/supercore/corestate/sqlite_corestate.py +157 -0
  255. flwr/supercore/ffs/disk_ffs.py +1 -2
  256. flwr/supercore/ffs/ffs.py +1 -2
  257. flwr/supercore/ffs/ffs_factory.py +1 -2
  258. flwr/{common → supercore}/heartbeat.py +20 -25
  259. flwr/supercore/object_store/in_memory_object_store.py +1 -2
  260. flwr/supercore/object_store/object_store.py +1 -2
  261. flwr/supercore/object_store/object_store_factory.py +1 -2
  262. flwr/supercore/object_store/sqlite_object_store.py +8 -7
  263. flwr/supercore/primitives/asymmetric.py +1 -1
  264. flwr/supercore/primitives/asymmetric_ed25519.py +11 -1
  265. flwr/supercore/sqlite_mixin.py +37 -34
  266. flwr/supercore/superexec/plugin/base_exec_plugin.py +1 -2
  267. flwr/supercore/superexec/plugin/exec_plugin.py +3 -3
  268. flwr/supercore/superexec/run_superexec.py +9 -13
  269. flwr/superlink/artifact_provider/artifact_provider.py +1 -2
  270. flwr/superlink/auth_plugin/auth_plugin.py +6 -9
  271. flwr/superlink/auth_plugin/noop_auth_plugin.py +6 -9
  272. flwr/superlink/federation/__init__.py +24 -0
  273. flwr/superlink/federation/federation_manager.py +64 -0
  274. flwr/superlink/federation/noop_federation_manager.py +71 -0
  275. flwr/superlink/servicer/control/control_account_auth_interceptor.py +22 -13
  276. flwr/superlink/servicer/control/control_event_log_interceptor.py +7 -7
  277. flwr/superlink/servicer/control/control_grpc.py +5 -6
  278. flwr/superlink/servicer/control/control_license_interceptor.py +3 -3
  279. flwr/superlink/servicer/control/control_servicer.py +102 -18
  280. flwr/supernode/cli/flower_supernode.py +58 -3
  281. flwr/supernode/nodestate/in_memory_nodestate.py +60 -49
  282. flwr/supernode/nodestate/nodestate.py +7 -8
  283. flwr/supernode/nodestate/nodestate_factory.py +7 -4
  284. flwr/supernode/runtime/run_clientapp.py +41 -22
  285. flwr/supernode/servicer/clientappio/clientappio_servicer.py +40 -10
  286. flwr/supernode/start_client_internal.py +158 -42
  287. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/METADATA +8 -8
  288. flwr-1.24.0.dist-info/RECORD +454 -0
  289. flwr/supercore/object_store/utils.py +0 -43
  290. flwr-1.23.0.dist-info/RECORD +0 -439
  291. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/WHEEL +0 -0
  292. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,24 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
+ import warnings
4
5
 
6
+
7
+ GRPC_GENERATED_VERSION = '1.70.0'
8
+ GRPC_VERSION = grpc.__version__
9
+ _version_not_supported = False
10
+
11
+ try:
12
+ from grpc._utilities import first_version_is_lower
13
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
14
+ except ImportError:
15
+ _version_not_supported = True
16
+
17
+ if _version_not_supported:
18
+ raise RuntimeError(
19
+ f'The grpc package installed is at version {GRPC_VERSION},'
20
+ + f' but the generated code in flwr/proto/fab_pb2_grpc.py depends on'
21
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
22
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
23
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
24
+ )
@@ -1,4 +1,31 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
20
+ import abc
21
+ import collections.abc
22
+ import grpc
23
+ import grpc.aio
24
+ import typing
25
+
26
+ _T = typing.TypeVar("_T")
27
+
28
+ class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...
29
+
30
+ class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext): # type: ignore[misc, type-arg]
31
+ ...
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: flwr/proto/federation.proto
5
+ # Protobuf Python Version: 5.29.0
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'flwr/proto/federation.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
26
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
27
+
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')
30
+
31
+ _globals = globals()
32
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.federation_pb2', _globals)
34
+ if not _descriptor._USE_C_DESCRIPTORS:
35
+ DESCRIPTOR._loaded_options = None
36
+ _globals['_FEDERATION']._serialized_start=88
37
+ _globals['_FEDERATION']._serialized_end=203
38
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,56 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
18
+ """
19
+
20
+ import builtins
21
+ import collections.abc
22
+ import flwr.proto.node_pb2
23
+ import flwr.proto.run_pb2
24
+ import google.protobuf.descriptor
25
+ import google.protobuf.internal.containers
26
+ import google.protobuf.message
27
+ import typing
28
+
29
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
30
+
31
+ @typing.final
32
+ class Federation(google.protobuf.message.Message):
33
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
+
35
+ NAME_FIELD_NUMBER: builtins.int
36
+ MEMBER_AIDS_FIELD_NUMBER: builtins.int
37
+ NODES_FIELD_NUMBER: builtins.int
38
+ RUNS_FIELD_NUMBER: builtins.int
39
+ name: builtins.str
40
+ @property
41
+ def member_aids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
42
+ @property
43
+ def nodes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.node_pb2.NodeInfo]: ...
44
+ @property
45
+ def runs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.run_pb2.Run]: ...
46
+ def __init__(
47
+ self,
48
+ *,
49
+ name: builtins.str = ...,
50
+ member_aids: collections.abc.Iterable[builtins.str] | None = ...,
51
+ nodes: collections.abc.Iterable[flwr.proto.node_pb2.NodeInfo] | None = ...,
52
+ runs: collections.abc.Iterable[flwr.proto.run_pb2.Run] | None = ...,
53
+ ) -> None: ...
54
+ def ClearField(self, field_name: typing.Literal["member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
55
+
56
+ global___Federation = Federation
@@ -0,0 +1,24 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+
7
+ GRPC_GENERATED_VERSION = '1.70.0'
8
+ GRPC_VERSION = grpc.__version__
9
+ _version_not_supported = False
10
+
11
+ try:
12
+ from grpc._utilities import first_version_is_lower
13
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
14
+ except ImportError:
15
+ _version_not_supported = True
16
+
17
+ if _version_not_supported:
18
+ raise RuntimeError(
19
+ f'The grpc package installed is at version {GRPC_VERSION},'
20
+ + f' but the generated code in flwr/proto/federation_pb2_grpc.py depends on'
21
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
22
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
23
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
24
+ )
@@ -0,0 +1,31 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
18
+ """
19
+
20
+ import abc
21
+ import collections.abc
22
+ import grpc
23
+ import grpc.aio
24
+ import typing
25
+
26
+ _T = typing.TypeVar("_T")
27
+
28
+ class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...
29
+
30
+ class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext): # type: ignore[misc, type-arg]
31
+ ...
flwr/proto/fleet_pb2.py CHANGED
@@ -1,12 +1,22 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
3
4
  # source: flwr/proto/fleet.proto
4
- # Protobuf Python Version: 4.25.1
5
+ # Protobuf Python Version: 5.29.0
5
6
  """Generated protocol buffer code."""
6
7
  from google.protobuf import descriptor as _descriptor
7
8
  from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
8
10
  from google.protobuf import symbol_database as _symbol_database
9
11
  from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'flwr/proto/fleet.proto'
19
+ )
10
20
  # @@protoc_insertion_point(imports)
11
21
 
12
22
  _sym_db = _symbol_database.Default()
@@ -24,9 +34,9 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/
24
34
  _globals = globals()
25
35
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
36
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
27
- if _descriptor._USE_C_DESCRIPTORS == False:
28
- DESCRIPTOR._options = None
29
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
37
+ if not _descriptor._USE_C_DESCRIPTORS:
38
+ DESCRIPTOR._loaded_options = None
39
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._loaded_options = None
30
40
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
31
41
  _globals['_REGISTERNODEFLEETREQUEST']._serialized_start=159
32
42
  _globals['_REGISTERNODEFLEETREQUEST']._serialized_end=205
flwr/proto/fleet_pb2.pyi CHANGED
@@ -1,123 +1,181 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2022 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
5
20
  import builtins
21
+ import collections.abc
6
22
  import flwr.proto.message_pb2
7
23
  import flwr.proto.node_pb2
8
24
  import google.protobuf.descriptor
9
25
  import google.protobuf.internal.containers
10
26
  import google.protobuf.message
11
27
  import typing
12
- import typing_extensions
13
28
 
14
29
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
15
30
 
31
+ @typing.final
16
32
  class RegisterNodeFleetRequest(google.protobuf.message.Message):
17
33
  """RegisterNode messages (add prefix to avoid name clash)"""
34
+
18
35
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
36
+
19
37
  PUBLIC_KEY_FIELD_NUMBER: builtins.int
20
38
  public_key: builtins.bytes
21
- def __init__(self,
39
+ def __init__(
40
+ self,
22
41
  *,
23
42
  public_key: builtins.bytes = ...,
24
- ) -> None: ...
25
- def ClearField(self, field_name: typing_extensions.Literal["public_key",b"public_key"]) -> None: ...
43
+ ) -> None: ...
44
+ def ClearField(self, field_name: typing.Literal["public_key", b"public_key"]) -> None: ...
45
+
26
46
  global___RegisterNodeFleetRequest = RegisterNodeFleetRequest
27
47
 
48
+ @typing.final
28
49
  class RegisterNodeFleetResponse(google.protobuf.message.Message):
29
50
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
51
+
30
52
  NODE_ID_FIELD_NUMBER: builtins.int
31
53
  node_id: builtins.int
32
- def __init__(self,
54
+ def __init__(
55
+ self,
33
56
  *,
34
57
  node_id: builtins.int = ...,
35
- ) -> None: ...
36
- def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
58
+ ) -> None: ...
59
+ def ClearField(self, field_name: typing.Literal["node_id", b"node_id"]) -> None: ...
60
+
37
61
  global___RegisterNodeFleetResponse = RegisterNodeFleetResponse
38
62
 
63
+ @typing.final
39
64
  class ActivateNodeRequest(google.protobuf.message.Message):
40
65
  """ActivateNode messages"""
66
+
41
67
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
68
+
42
69
  PUBLIC_KEY_FIELD_NUMBER: builtins.int
43
70
  HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
44
71
  public_key: builtins.bytes
45
72
  heartbeat_interval: builtins.float
46
- def __init__(self,
73
+ def __init__(
74
+ self,
47
75
  *,
48
76
  public_key: builtins.bytes = ...,
49
77
  heartbeat_interval: builtins.float = ...,
50
- ) -> None: ...
51
- def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval","public_key",b"public_key"]) -> None: ...
78
+ ) -> None: ...
79
+ def ClearField(self, field_name: typing.Literal["heartbeat_interval", b"heartbeat_interval", "public_key", b"public_key"]) -> None: ...
80
+
52
81
  global___ActivateNodeRequest = ActivateNodeRequest
53
82
 
83
+ @typing.final
54
84
  class ActivateNodeResponse(google.protobuf.message.Message):
55
85
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
86
+
56
87
  NODE_ID_FIELD_NUMBER: builtins.int
57
88
  node_id: builtins.int
58
- def __init__(self,
89
+ def __init__(
90
+ self,
59
91
  *,
60
92
  node_id: builtins.int = ...,
61
- ) -> None: ...
62
- def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
93
+ ) -> None: ...
94
+ def ClearField(self, field_name: typing.Literal["node_id", b"node_id"]) -> None: ...
95
+
63
96
  global___ActivateNodeResponse = ActivateNodeResponse
64
97
 
98
+ @typing.final
65
99
  class DeactivateNodeRequest(google.protobuf.message.Message):
66
100
  """DeactivateNode messages"""
101
+
67
102
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
103
+
68
104
  NODE_ID_FIELD_NUMBER: builtins.int
69
105
  node_id: builtins.int
70
- def __init__(self,
106
+ def __init__(
107
+ self,
71
108
  *,
72
109
  node_id: builtins.int = ...,
73
- ) -> None: ...
74
- def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
110
+ ) -> None: ...
111
+ def ClearField(self, field_name: typing.Literal["node_id", b"node_id"]) -> None: ...
112
+
75
113
  global___DeactivateNodeRequest = DeactivateNodeRequest
76
114
 
115
+ @typing.final
77
116
  class DeactivateNodeResponse(google.protobuf.message.Message):
78
117
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
79
- def __init__(self,
80
- ) -> None: ...
118
+
119
+ def __init__(
120
+ self,
121
+ ) -> None: ...
122
+
81
123
  global___DeactivateNodeResponse = DeactivateNodeResponse
82
124
 
125
+ @typing.final
83
126
  class UnregisterNodeFleetRequest(google.protobuf.message.Message):
84
127
  """UnregisterNode messages (add prefix to avoid name clash)"""
128
+
85
129
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
130
+
86
131
  NODE_ID_FIELD_NUMBER: builtins.int
87
132
  node_id: builtins.int
88
- def __init__(self,
133
+ def __init__(
134
+ self,
89
135
  *,
90
136
  node_id: builtins.int = ...,
91
- ) -> None: ...
92
- def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
137
+ ) -> None: ...
138
+ def ClearField(self, field_name: typing.Literal["node_id", b"node_id"]) -> None: ...
139
+
93
140
  global___UnregisterNodeFleetRequest = UnregisterNodeFleetRequest
94
141
 
142
+ @typing.final
95
143
  class UnregisterNodeFleetResponse(google.protobuf.message.Message):
96
144
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
97
- def __init__(self,
98
- ) -> None: ...
145
+
146
+ def __init__(
147
+ self,
148
+ ) -> None: ...
149
+
99
150
  global___UnregisterNodeFleetResponse = UnregisterNodeFleetResponse
100
151
 
152
+ @typing.final
101
153
  class PullMessagesRequest(google.protobuf.message.Message):
102
154
  """PullMessages messages"""
155
+
103
156
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
157
+
104
158
  NODE_FIELD_NUMBER: builtins.int
105
159
  MESSAGE_IDS_FIELD_NUMBER: builtins.int
106
160
  @property
107
161
  def node(self) -> flwr.proto.node_pb2.Node: ...
108
162
  @property
109
- def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
110
- def __init__(self,
163
+ def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
164
+ def __init__(
165
+ self,
111
166
  *,
112
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
113
- message_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
114
- ) -> None: ...
115
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
116
- def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids","node",b"node"]) -> None: ...
167
+ node: flwr.proto.node_pb2.Node | None = ...,
168
+ message_ids: collections.abc.Iterable[builtins.str] | None = ...,
169
+ ) -> None: ...
170
+ def HasField(self, field_name: typing.Literal["node", b"node"]) -> builtins.bool: ...
171
+ def ClearField(self, field_name: typing.Literal["message_ids", b"message_ids", "node", b"node"]) -> None: ...
172
+
117
173
  global___PullMessagesRequest = PullMessagesRequest
118
174
 
175
+ @typing.final
119
176
  class PullMessagesResponse(google.protobuf.message.Message):
120
177
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
178
+
121
179
  RECONNECT_FIELD_NUMBER: builtins.int
122
180
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
123
181
  MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
@@ -127,19 +185,24 @@ class PullMessagesResponse(google.protobuf.message.Message):
127
185
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
128
186
  @property
129
187
  def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
130
- def __init__(self,
188
+ def __init__(
189
+ self,
131
190
  *,
132
- reconnect: typing.Optional[global___Reconnect] = ...,
133
- messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
134
- message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
135
- ) -> None: ...
136
- def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
137
- def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","reconnect",b"reconnect"]) -> None: ...
191
+ reconnect: global___Reconnect | None = ...,
192
+ messages_list: collections.abc.Iterable[flwr.proto.message_pb2.Message] | None = ...,
193
+ message_object_trees: collections.abc.Iterable[flwr.proto.message_pb2.ObjectTree] | None = ...,
194
+ ) -> None: ...
195
+ def HasField(self, field_name: typing.Literal["reconnect", b"reconnect"]) -> builtins.bool: ...
196
+ def ClearField(self, field_name: typing.Literal["message_object_trees", b"message_object_trees", "messages_list", b"messages_list", "reconnect", b"reconnect"]) -> None: ...
197
+
138
198
  global___PullMessagesResponse = PullMessagesResponse
139
199
 
200
+ @typing.final
140
201
  class PushMessagesRequest(google.protobuf.message.Message):
141
202
  """PushMessages messages"""
203
+
142
204
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
205
+
143
206
  NODE_FIELD_NUMBER: builtins.int
144
207
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
145
208
  MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
@@ -149,30 +212,37 @@ class PushMessagesRequest(google.protobuf.message.Message):
149
212
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
150
213
  @property
151
214
  def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
152
- def __init__(self,
215
+ def __init__(
216
+ self,
153
217
  *,
154
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
155
- messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
156
- message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
157
- ) -> None: ...
158
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
159
- def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","node",b"node"]) -> None: ...
218
+ node: flwr.proto.node_pb2.Node | None = ...,
219
+ messages_list: collections.abc.Iterable[flwr.proto.message_pb2.Message] | None = ...,
220
+ message_object_trees: collections.abc.Iterable[flwr.proto.message_pb2.ObjectTree] | None = ...,
221
+ ) -> None: ...
222
+ def HasField(self, field_name: typing.Literal["node", b"node"]) -> builtins.bool: ...
223
+ def ClearField(self, field_name: typing.Literal["message_object_trees", b"message_object_trees", "messages_list", b"messages_list", "node", b"node"]) -> None: ...
224
+
160
225
  global___PushMessagesRequest = PushMessagesRequest
161
226
 
227
+ @typing.final
162
228
  class PushMessagesResponse(google.protobuf.message.Message):
163
229
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
230
+
231
+ @typing.final
164
232
  class ResultsEntry(google.protobuf.message.Message):
165
233
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
234
+
166
235
  KEY_FIELD_NUMBER: builtins.int
167
236
  VALUE_FIELD_NUMBER: builtins.int
168
- key: typing.Text
237
+ key: builtins.str
169
238
  value: builtins.int
170
- def __init__(self,
239
+ def __init__(
240
+ self,
171
241
  *,
172
- key: typing.Text = ...,
242
+ key: builtins.str = ...,
173
243
  value: builtins.int = ...,
174
- ) -> None: ...
175
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
244
+ ) -> None: ...
245
+ def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...
176
246
 
177
247
  RECONNECT_FIELD_NUMBER: builtins.int
178
248
  RESULTS_FIELD_NUMBER: builtins.int
@@ -180,26 +250,32 @@ class PushMessagesResponse(google.protobuf.message.Message):
180
250
  @property
181
251
  def reconnect(self) -> global___Reconnect: ...
182
252
  @property
183
- def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
253
+ def results(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.int]: ...
184
254
  @property
185
- def objects_to_push(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
186
- def __init__(self,
255
+ def objects_to_push(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
256
+ def __init__(
257
+ self,
187
258
  *,
188
- reconnect: typing.Optional[global___Reconnect] = ...,
189
- results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
190
- objects_to_push: typing.Optional[typing.Iterable[typing.Text]] = ...,
191
- ) -> None: ...
192
- def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
193
- def ClearField(self, field_name: typing_extensions.Literal["objects_to_push",b"objects_to_push","reconnect",b"reconnect","results",b"results"]) -> None: ...
259
+ reconnect: global___Reconnect | None = ...,
260
+ results: collections.abc.Mapping[builtins.str, builtins.int] | None = ...,
261
+ objects_to_push: collections.abc.Iterable[builtins.str] | None = ...,
262
+ ) -> None: ...
263
+ def HasField(self, field_name: typing.Literal["reconnect", b"reconnect"]) -> builtins.bool: ...
264
+ def ClearField(self, field_name: typing.Literal["objects_to_push", b"objects_to_push", "reconnect", b"reconnect", "results", b"results"]) -> None: ...
265
+
194
266
  global___PushMessagesResponse = PushMessagesResponse
195
267
 
268
+ @typing.final
196
269
  class Reconnect(google.protobuf.message.Message):
197
270
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
271
+
198
272
  RECONNECT_FIELD_NUMBER: builtins.int
199
273
  reconnect: builtins.int
200
- def __init__(self,
274
+ def __init__(
275
+ self,
201
276
  *,
202
277
  reconnect: builtins.int = ...,
203
- ) -> None: ...
204
- def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> None: ...
278
+ ) -> None: ...
279
+ def ClearField(self, field_name: typing.Literal["reconnect", b"reconnect"]) -> None: ...
280
+
205
281
  global___Reconnect = Reconnect