flwr 1.13.1__py3-none-any.whl → 1.14.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 (120) hide show
  1. flwr/cli/app.py +5 -0
  2. flwr/cli/build.py +1 -0
  3. flwr/cli/cli_user_auth_interceptor.py +86 -0
  4. flwr/cli/config_utils.py +19 -2
  5. flwr/cli/example.py +1 -0
  6. flwr/cli/install.py +1 -0
  7. flwr/cli/log.py +18 -36
  8. flwr/cli/login/__init__.py +22 -0
  9. flwr/cli/login/login.py +81 -0
  10. flwr/cli/ls.py +205 -106
  11. flwr/cli/new/__init__.py +1 -0
  12. flwr/cli/new/new.py +2 -1
  13. flwr/cli/new/templates/app/.gitignore.tpl +3 -0
  14. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  15. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +3 -3
  16. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  17. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  18. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +2 -3
  19. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  20. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
  21. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  22. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  23. flwr/cli/run/__init__.py +1 -0
  24. flwr/cli/run/run.py +89 -39
  25. flwr/cli/stop.py +130 -0
  26. flwr/cli/utils.py +172 -8
  27. flwr/client/app.py +14 -3
  28. flwr/client/client.py +1 -32
  29. flwr/client/clientapp/app.py +4 -1
  30. flwr/client/clientapp/utils.py +1 -0
  31. flwr/client/grpc_adapter_client/connection.py +1 -1
  32. flwr/client/grpc_client/connection.py +1 -1
  33. flwr/client/grpc_rere_client/connection.py +13 -7
  34. flwr/client/message_handler/message_handler.py +1 -2
  35. flwr/client/mod/comms_mods.py +1 -0
  36. flwr/client/mod/localdp_mod.py +1 -1
  37. flwr/client/nodestate/__init__.py +1 -0
  38. flwr/client/nodestate/nodestate.py +1 -0
  39. flwr/client/nodestate/nodestate_factory.py +1 -0
  40. flwr/client/numpy_client.py +0 -44
  41. flwr/client/rest_client/connection.py +3 -3
  42. flwr/client/supernode/app.py +2 -2
  43. flwr/common/address.py +1 -0
  44. flwr/common/args.py +1 -0
  45. flwr/common/auth_plugin/__init__.py +24 -0
  46. flwr/common/auth_plugin/auth_plugin.py +111 -0
  47. flwr/common/config.py +3 -1
  48. flwr/common/constant.py +17 -1
  49. flwr/common/logger.py +40 -0
  50. flwr/common/message.py +1 -0
  51. flwr/common/object_ref.py +57 -54
  52. flwr/common/pyproject.py +1 -0
  53. flwr/common/record/__init__.py +1 -0
  54. flwr/common/record/parametersrecord.py +1 -0
  55. flwr/common/retry_invoker.py +77 -0
  56. flwr/common/secure_aggregation/secaggplus_utils.py +2 -2
  57. flwr/common/telemetry.py +15 -4
  58. flwr/common/typing.py +12 -0
  59. flwr/common/version.py +1 -0
  60. flwr/proto/exec_pb2.py +38 -14
  61. flwr/proto/exec_pb2.pyi +107 -2
  62. flwr/proto/exec_pb2_grpc.py +102 -0
  63. flwr/proto/exec_pb2_grpc.pyi +39 -0
  64. flwr/proto/fab_pb2.py +4 -4
  65. flwr/proto/fab_pb2.pyi +4 -1
  66. flwr/proto/serverappio_pb2.py +18 -18
  67. flwr/proto/serverappio_pb2.pyi +8 -2
  68. flwr/proto/serverappio_pb2_grpc.py +34 -0
  69. flwr/proto/serverappio_pb2_grpc.pyi +13 -0
  70. flwr/proto/simulationio_pb2.py +2 -2
  71. flwr/proto/simulationio_pb2_grpc.py +34 -0
  72. flwr/proto/simulationio_pb2_grpc.pyi +13 -0
  73. flwr/server/app.py +54 -2
  74. flwr/server/compat/app_utils.py +7 -1
  75. flwr/server/driver/grpc_driver.py +11 -63
  76. flwr/server/driver/inmemory_driver.py +5 -1
  77. flwr/server/run_serverapp.py +8 -9
  78. flwr/server/serverapp/app.py +25 -3
  79. flwr/server/strategy/dpfedavg_fixed.py +1 -0
  80. flwr/server/superlink/driver/serverappio_grpc.py +1 -0
  81. flwr/server/superlink/driver/serverappio_servicer.py +82 -23
  82. flwr/server/superlink/ffs/disk_ffs.py +1 -0
  83. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +1 -0
  84. flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -0
  85. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +32 -12
  86. flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +12 -11
  87. flwr/server/superlink/fleet/message_handler/message_handler.py +32 -5
  88. flwr/server/superlink/fleet/rest_rere/rest_api.py +4 -1
  89. flwr/server/superlink/fleet/vce/__init__.py +1 -0
  90. flwr/server/superlink/fleet/vce/backend/__init__.py +1 -0
  91. flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -0
  92. flwr/server/superlink/linkstate/in_memory_linkstate.py +21 -30
  93. flwr/server/superlink/linkstate/linkstate.py +17 -2
  94. flwr/server/superlink/linkstate/sqlite_linkstate.py +30 -49
  95. flwr/server/superlink/simulation/simulationio_servicer.py +33 -0
  96. flwr/server/superlink/utils.py +65 -0
  97. flwr/simulation/app.py +16 -4
  98. flwr/simulation/ray_transport/ray_actor.py +1 -0
  99. flwr/simulation/ray_transport/utils.py +1 -0
  100. flwr/simulation/run_simulation.py +36 -22
  101. flwr/simulation/simulationio_connection.py +3 -0
  102. flwr/superexec/app.py +1 -0
  103. flwr/superexec/deployment.py +1 -0
  104. flwr/superexec/exec_grpc.py +19 -1
  105. flwr/superexec/exec_servicer.py +76 -2
  106. flwr/superexec/exec_user_auth_interceptor.py +101 -0
  107. flwr/superexec/executor.py +1 -0
  108. {flwr-1.13.1.dist-info → flwr-1.14.0.dist-info}/METADATA +8 -7
  109. {flwr-1.13.1.dist-info → flwr-1.14.0.dist-info}/RECORD +112 -112
  110. flwr/proto/common_pb2.py +0 -36
  111. flwr/proto/common_pb2.pyi +0 -121
  112. flwr/proto/common_pb2_grpc.py +0 -4
  113. flwr/proto/common_pb2_grpc.pyi +0 -4
  114. flwr/proto/control_pb2.py +0 -27
  115. flwr/proto/control_pb2.pyi +0 -7
  116. flwr/proto/control_pb2_grpc.py +0 -135
  117. flwr/proto/control_pb2_grpc.pyi +0 -53
  118. {flwr-1.13.1.dist-info → flwr-1.14.0.dist-info}/LICENSE +0 -0
  119. {flwr-1.13.1.dist-info → flwr-1.14.0.dist-info}/WHEEL +0 -0
  120. {flwr-1.13.1.dist-info → flwr-1.14.0.dist-info}/entry_points.txt +0 -0
flwr/common/pyproject.py CHANGED
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Validates the project's name property."""
16
16
 
17
+
17
18
  import re
18
19
 
19
20
 
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Record APIs."""
16
16
 
17
+
17
18
  from .configsrecord import ConfigsRecord
18
19
  from .conversion_utils import array_from_numpy
19
20
  from .metricsrecord import MetricsRecord
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """ParametersRecord and Array."""
16
16
 
17
+
17
18
  from collections import OrderedDict
18
19
  from dataclasses import dataclass
19
20
  from io import BytesIO
@@ -20,8 +20,18 @@ import random
20
20
  import time
21
21
  from collections.abc import Generator, Iterable
22
22
  from dataclasses import dataclass
23
+ from logging import INFO, WARN
23
24
  from typing import Any, Callable, Optional, Union, cast
24
25
 
26
+ import grpc
27
+
28
+ from flwr.common.constant import MAX_RETRY_DELAY
29
+ from flwr.common.logger import log
30
+ from flwr.common.typing import RunNotRunningException
31
+ from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
32
+ from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub
33
+ from flwr.proto.simulationio_pb2_grpc import SimulationIoStub
34
+
25
35
 
26
36
  def exponential(
27
37
  base_delay: float = 1,
@@ -303,3 +313,70 @@ class RetryInvoker:
303
313
  # Trigger success event
304
314
  try_call_event_handler(self.on_success)
305
315
  return ret
316
+
317
+
318
+ def _make_simple_grpc_retry_invoker() -> RetryInvoker:
319
+ """Create a simple gRPC retry invoker."""
320
+
321
+ def _on_sucess(retry_state: RetryState) -> None:
322
+ if retry_state.tries > 1:
323
+ log(
324
+ INFO,
325
+ "Connection successful after %.2f seconds and %s tries.",
326
+ retry_state.elapsed_time,
327
+ retry_state.tries,
328
+ )
329
+
330
+ def _on_backoff(retry_state: RetryState) -> None:
331
+ if retry_state.tries == 1:
332
+ log(WARN, "Connection attempt failed, retrying...")
333
+ else:
334
+ log(
335
+ WARN,
336
+ "Connection attempt failed, retrying in %.2f seconds",
337
+ retry_state.actual_wait,
338
+ )
339
+
340
+ def _on_giveup(retry_state: RetryState) -> None:
341
+ if retry_state.tries > 1:
342
+ log(
343
+ WARN,
344
+ "Giving up reconnection after %.2f seconds and %s tries.",
345
+ retry_state.elapsed_time,
346
+ retry_state.tries,
347
+ )
348
+
349
+ def _should_giveup_fn(e: Exception) -> bool:
350
+ if e.code() == grpc.StatusCode.PERMISSION_DENIED: # type: ignore
351
+ raise RunNotRunningException
352
+ if e.code() == grpc.StatusCode.UNAVAILABLE: # type: ignore
353
+ return False
354
+ return True
355
+
356
+ return RetryInvoker(
357
+ wait_gen_factory=lambda: exponential(max_delay=MAX_RETRY_DELAY),
358
+ recoverable_exceptions=grpc.RpcError,
359
+ max_tries=None,
360
+ max_time=None,
361
+ on_success=_on_sucess,
362
+ on_backoff=_on_backoff,
363
+ on_giveup=_on_giveup,
364
+ should_giveup=_should_giveup_fn,
365
+ )
366
+
367
+
368
+ def _wrap_stub(
369
+ stub: Union[ServerAppIoStub, ClientAppIoStub, SimulationIoStub],
370
+ retry_invoker: RetryInvoker,
371
+ ) -> None:
372
+ """Wrap a gRPC stub with a retry invoker."""
373
+
374
+ def make_lambda(original_method: Any) -> Any:
375
+ return lambda *args, **kwargs: retry_invoker.invoke(
376
+ original_method, *args, **kwargs
377
+ )
378
+
379
+ for method_name in vars(stub):
380
+ method = getattr(stub, method_name)
381
+ if callable(method):
382
+ setattr(stub, method_name, make_lambda(method))
@@ -93,8 +93,8 @@ def pseudo_rand_gen(
93
93
  output = []
94
94
  for dimension in dimensions_list:
95
95
  if len(dimension) == 0:
96
- arr = np.array(gen.randint(0, num_range - 1), dtype=int)
96
+ arr = np.array(gen.randint(0, num_range - 1), dtype=np.int64)
97
97
  else:
98
- arr = gen.randint(0, num_range - 1, dimension)
98
+ arr = gen.randint(0, num_range - 1, dimension, dtype=np.int64)
99
99
  output.append(arr)
100
100
  return output
flwr/common/telemetry.py CHANGED
@@ -27,6 +27,7 @@ from enum import Enum, auto
27
27
  from pathlib import Path
28
28
  from typing import Any, Optional, Union, cast
29
29
 
30
+ from flwr.common.constant import FLWR_DIR
30
31
  from flwr.common.version import package_name, package_version
31
32
 
32
33
  FLWR_TELEMETRY_ENABLED = os.getenv("FLWR_TELEMETRY_ENABLED", "1")
@@ -86,7 +87,7 @@ def _get_source_id() -> str:
86
87
  # If the home directory can’t be resolved, RuntimeError is raised.
87
88
  return source_id
88
89
 
89
- flwr_dir = home.joinpath(".flwr")
90
+ flwr_dir = home.joinpath(FLWR_DIR)
90
91
  # Create .flwr directory if it does not exist yet.
91
92
  try:
92
93
  flwr_dir.mkdir(parents=True, exist_ok=True)
@@ -150,6 +151,16 @@ class EventType(str, Enum):
150
151
 
151
152
  # Not yet implemented
152
153
 
154
+ # --- `flwr-*` commands ------------------------------------------------------------
155
+
156
+ # CLI: flwr-simulation
157
+ FLWR_SIMULATION_RUN_ENTER = auto()
158
+ FLWR_SIMULATION_RUN_LEAVE = auto()
159
+
160
+ # CLI: flwr-serverapp
161
+ FLWR_SERVERAPP_RUN_ENTER = auto()
162
+ FLWR_SERVERAPP_RUN_LEAVE = auto()
163
+
153
164
  # --- Simulation Engine ------------------------------------------------------------
154
165
 
155
166
  # CLI: flower-simulation
@@ -170,12 +181,12 @@ class EventType(str, Enum):
170
181
  RUN_SUPERNODE_ENTER = auto()
171
182
  RUN_SUPERNODE_LEAVE = auto()
172
183
 
173
- # CLI: `flower-server-app`
184
+ # --- DEPRECATED -------------------------------------------------------------------
185
+
186
+ # [DEPRECATED] CLI: `flower-server-app`
174
187
  RUN_SERVER_APP_ENTER = auto()
175
188
  RUN_SERVER_APP_LEAVE = auto()
176
189
 
177
- # --- DEPRECATED -------------------------------------------------------------------
178
-
179
190
  # [DEPRECATED] CLI: `flower-client-app`
180
191
  RUN_CLIENT_APP_ENTER = auto()
181
192
  RUN_CLIENT_APP_LEAVE = auto()
flwr/common/typing.py CHANGED
@@ -254,3 +254,15 @@ class Fab:
254
254
 
255
255
  hash_str: str
256
256
  content: bytes
257
+
258
+
259
+ class RunNotRunningException(BaseException):
260
+ """Raised when a run is not running."""
261
+
262
+
263
+ class InvalidRunStatusException(BaseException):
264
+ """Raised when an RPC is invalidated by the RunStatus."""
265
+
266
+ def __init__(self, message: str) -> None:
267
+ super().__init__(message)
268
+ self.message = message
flwr/common/version.py CHANGED
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower package version helper."""
16
16
 
17
+
17
18
  import importlib.metadata as importlib_metadata
18
19
 
19
20
 
flwr/proto/exec_pb2.py CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
18
18
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x14\x66lwr/proto/run.proto\"\xfb\x01\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x35\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\x32\xe9\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x62\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x14\x66lwr/proto/run.proto\"\xfb\x01\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x35\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"2\n\x10StartRunResponse\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\"\x18\n\x16GetLoginDetailsRequest\"\x9c\x01\n\x17GetLoginDetailsResponse\x12L\n\rlogin_details\x18\x01 \x03(\x0b\x32\x35.flwr.proto.GetLoginDetailsResponse.LoginDetailsEntry\x1a\x33\n\x11LoginDetailsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x93\x01\n\x14GetAuthTokensRequest\x12G\n\x0c\x61uth_details\x18\x01 \x03(\x0b\x32\x31.flwr.proto.GetAuthTokensRequest.AuthDetailsEntry\x1a\x32\n\x10\x41uthDetailsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x92\x01\n\x15GetAuthTokensResponse\x12\x46\n\x0b\x61uth_tokens\x18\x01 \x03(\x0b\x32\x31.flwr.proto.GetAuthTokensResponse.AuthTokensEntry\x1a\x31\n\x0f\x41uthTokensEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x32\xe5\x03\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12\x44\n\x07StopRun\x12\x1a.flwr.proto.StopRunRequest\x1a\x1b.flwr.proto.StopRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x12\\\n\x0fGetLoginDetails\x12\".flwr.proto.GetLoginDetailsRequest\x1a#.flwr.proto.GetLoginDetailsResponse\"\x00\x12V\n\rGetAuthTokens\x12 .flwr.proto.GetAuthTokensRequest\x1a!.flwr.proto.GetAuthTokensResponse\"\x00\x62\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -29,22 +29,46 @@ if _descriptor._USE_C_DESCRIPTORS == False:
29
29
  _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
30
30
  _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
31
31
  _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
32
+ _globals['_GETLOGINDETAILSRESPONSE_LOGINDETAILSENTRY']._options = None
33
+ _globals['_GETLOGINDETAILSRESPONSE_LOGINDETAILSENTRY']._serialized_options = b'8\001'
34
+ _globals['_GETAUTHTOKENSREQUEST_AUTHDETAILSENTRY']._options = None
35
+ _globals['_GETAUTHTOKENSREQUEST_AUTHDETAILSENTRY']._serialized_options = b'8\001'
36
+ _globals['_GETAUTHTOKENSRESPONSE_AUTHTOKENSENTRY']._options = None
37
+ _globals['_GETAUTHTOKENSRESPONSE_AUTHTOKENSENTRY']._serialized_options = b'8\001'
32
38
  _globals['_STARTRUNREQUEST']._serialized_start=138
33
39
  _globals['_STARTRUNREQUEST']._serialized_end=389
34
40
  _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=316
35
41
  _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=389
36
42
  _globals['_STARTRUNRESPONSE']._serialized_start=391
37
- _globals['_STARTRUNRESPONSE']._serialized_end=425
38
- _globals['_STREAMLOGSREQUEST']._serialized_start=427
39
- _globals['_STREAMLOGSREQUEST']._serialized_end=487
40
- _globals['_STREAMLOGSRESPONSE']._serialized_start=489
41
- _globals['_STREAMLOGSRESPONSE']._serialized_end=555
42
- _globals['_LISTRUNSREQUEST']._serialized_start=557
43
- _globals['_LISTRUNSREQUEST']._serialized_end=606
44
- _globals['_LISTRUNSRESPONSE']._serialized_start=609
45
- _globals['_LISTRUNSRESPONSE']._serialized_end=766
46
- _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=703
47
- _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=766
48
- _globals['_EXEC']._serialized_start=769
49
- _globals['_EXEC']._serialized_end=1002
43
+ _globals['_STARTRUNRESPONSE']._serialized_end=441
44
+ _globals['_STREAMLOGSREQUEST']._serialized_start=443
45
+ _globals['_STREAMLOGSREQUEST']._serialized_end=503
46
+ _globals['_STREAMLOGSRESPONSE']._serialized_start=505
47
+ _globals['_STREAMLOGSRESPONSE']._serialized_end=571
48
+ _globals['_LISTRUNSREQUEST']._serialized_start=573
49
+ _globals['_LISTRUNSREQUEST']._serialized_end=622
50
+ _globals['_LISTRUNSRESPONSE']._serialized_start=625
51
+ _globals['_LISTRUNSRESPONSE']._serialized_end=782
52
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=719
53
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=782
54
+ _globals['_GETLOGINDETAILSREQUEST']._serialized_start=784
55
+ _globals['_GETLOGINDETAILSREQUEST']._serialized_end=808
56
+ _globals['_GETLOGINDETAILSRESPONSE']._serialized_start=811
57
+ _globals['_GETLOGINDETAILSRESPONSE']._serialized_end=967
58
+ _globals['_GETLOGINDETAILSRESPONSE_LOGINDETAILSENTRY']._serialized_start=916
59
+ _globals['_GETLOGINDETAILSRESPONSE_LOGINDETAILSENTRY']._serialized_end=967
60
+ _globals['_GETAUTHTOKENSREQUEST']._serialized_start=970
61
+ _globals['_GETAUTHTOKENSREQUEST']._serialized_end=1117
62
+ _globals['_GETAUTHTOKENSREQUEST_AUTHDETAILSENTRY']._serialized_start=1067
63
+ _globals['_GETAUTHTOKENSREQUEST_AUTHDETAILSENTRY']._serialized_end=1117
64
+ _globals['_GETAUTHTOKENSRESPONSE']._serialized_start=1120
65
+ _globals['_GETAUTHTOKENSRESPONSE']._serialized_end=1266
66
+ _globals['_GETAUTHTOKENSRESPONSE_AUTHTOKENSENTRY']._serialized_start=1217
67
+ _globals['_GETAUTHTOKENSRESPONSE_AUTHTOKENSENTRY']._serialized_end=1266
68
+ _globals['_STOPRUNREQUEST']._serialized_start=1268
69
+ _globals['_STOPRUNREQUEST']._serialized_end=1300
70
+ _globals['_STOPRUNRESPONSE']._serialized_start=1302
71
+ _globals['_STOPRUNRESPONSE']._serialized_end=1336
72
+ _globals['_EXEC']._serialized_start=1339
73
+ _globals['_EXEC']._serialized_end=1824
50
74
  # @@protoc_insertion_point(module_scope)
flwr/proto/exec_pb2.pyi CHANGED
@@ -57,9 +57,11 @@ class StartRunResponse(google.protobuf.message.Message):
57
57
  run_id: builtins.int
58
58
  def __init__(self,
59
59
  *,
60
- run_id: builtins.int = ...,
60
+ run_id: typing.Optional[builtins.int] = ...,
61
61
  ) -> None: ...
62
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
62
+ def HasField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> builtins.bool: ...
63
+ def ClearField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> None: ...
64
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_run_id",b"_run_id"]) -> typing.Optional[typing_extensions.Literal["run_id"]]: ...
63
65
  global___StartRunResponse = StartRunResponse
64
66
 
65
67
  class StreamLogsRequest(google.protobuf.message.Message):
@@ -132,3 +134,106 @@ class ListRunsResponse(google.protobuf.message.Message):
132
134
  ) -> None: ...
133
135
  def ClearField(self, field_name: typing_extensions.Literal["now",b"now","run_dict",b"run_dict"]) -> None: ...
134
136
  global___ListRunsResponse = ListRunsResponse
137
+
138
+ class GetLoginDetailsRequest(google.protobuf.message.Message):
139
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
140
+ def __init__(self,
141
+ ) -> None: ...
142
+ global___GetLoginDetailsRequest = GetLoginDetailsRequest
143
+
144
+ class GetLoginDetailsResponse(google.protobuf.message.Message):
145
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
146
+ class LoginDetailsEntry(google.protobuf.message.Message):
147
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
148
+ KEY_FIELD_NUMBER: builtins.int
149
+ VALUE_FIELD_NUMBER: builtins.int
150
+ key: typing.Text
151
+ value: typing.Text
152
+ def __init__(self,
153
+ *,
154
+ key: typing.Text = ...,
155
+ value: typing.Text = ...,
156
+ ) -> None: ...
157
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
158
+
159
+ LOGIN_DETAILS_FIELD_NUMBER: builtins.int
160
+ @property
161
+ def login_details(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]: ...
162
+ def __init__(self,
163
+ *,
164
+ login_details: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
165
+ ) -> None: ...
166
+ def ClearField(self, field_name: typing_extensions.Literal["login_details",b"login_details"]) -> None: ...
167
+ global___GetLoginDetailsResponse = GetLoginDetailsResponse
168
+
169
+ class GetAuthTokensRequest(google.protobuf.message.Message):
170
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
171
+ class AuthDetailsEntry(google.protobuf.message.Message):
172
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
173
+ KEY_FIELD_NUMBER: builtins.int
174
+ VALUE_FIELD_NUMBER: builtins.int
175
+ key: typing.Text
176
+ value: typing.Text
177
+ def __init__(self,
178
+ *,
179
+ key: typing.Text = ...,
180
+ value: typing.Text = ...,
181
+ ) -> None: ...
182
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
183
+
184
+ AUTH_DETAILS_FIELD_NUMBER: builtins.int
185
+ @property
186
+ def auth_details(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]: ...
187
+ def __init__(self,
188
+ *,
189
+ auth_details: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
190
+ ) -> None: ...
191
+ def ClearField(self, field_name: typing_extensions.Literal["auth_details",b"auth_details"]) -> None: ...
192
+ global___GetAuthTokensRequest = GetAuthTokensRequest
193
+
194
+ class GetAuthTokensResponse(google.protobuf.message.Message):
195
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
196
+ class AuthTokensEntry(google.protobuf.message.Message):
197
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
198
+ KEY_FIELD_NUMBER: builtins.int
199
+ VALUE_FIELD_NUMBER: builtins.int
200
+ key: typing.Text
201
+ value: typing.Text
202
+ def __init__(self,
203
+ *,
204
+ key: typing.Text = ...,
205
+ value: typing.Text = ...,
206
+ ) -> None: ...
207
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
208
+
209
+ AUTH_TOKENS_FIELD_NUMBER: builtins.int
210
+ @property
211
+ def auth_tokens(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]: ...
212
+ def __init__(self,
213
+ *,
214
+ auth_tokens: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
215
+ ) -> None: ...
216
+ def ClearField(self, field_name: typing_extensions.Literal["auth_tokens",b"auth_tokens"]) -> None: ...
217
+ global___GetAuthTokensResponse = GetAuthTokensResponse
218
+
219
+ class StopRunRequest(google.protobuf.message.Message):
220
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
221
+ RUN_ID_FIELD_NUMBER: builtins.int
222
+ run_id: builtins.int
223
+ def __init__(self,
224
+ *,
225
+ run_id: builtins.int = ...,
226
+ ) -> None: ...
227
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
228
+ global___StopRunRequest = StopRunRequest
229
+
230
+ class StopRunResponse(google.protobuf.message.Message):
231
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
232
+ SUCCESS_FIELD_NUMBER: builtins.int
233
+ success: builtins.bool
234
+ def __init__(self,
235
+ *,
236
+ success: builtins.bool = ...,
237
+ ) -> None: ...
238
+ def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
239
+ global___StopRunResponse = StopRunResponse
@@ -19,6 +19,11 @@ class ExecStub(object):
19
19
  request_serializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.SerializeToString,
20
20
  response_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.FromString,
21
21
  )
22
+ self.StopRun = channel.unary_unary(
23
+ '/flwr.proto.Exec/StopRun',
24
+ request_serializer=flwr_dot_proto_dot_exec__pb2.StopRunRequest.SerializeToString,
25
+ response_deserializer=flwr_dot_proto_dot_exec__pb2.StopRunResponse.FromString,
26
+ )
22
27
  self.StreamLogs = channel.unary_stream(
23
28
  '/flwr.proto.Exec/StreamLogs',
24
29
  request_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
@@ -29,6 +34,16 @@ class ExecStub(object):
29
34
  request_serializer=flwr_dot_proto_dot_exec__pb2.ListRunsRequest.SerializeToString,
30
35
  response_deserializer=flwr_dot_proto_dot_exec__pb2.ListRunsResponse.FromString,
31
36
  )
37
+ self.GetLoginDetails = channel.unary_unary(
38
+ '/flwr.proto.Exec/GetLoginDetails',
39
+ request_serializer=flwr_dot_proto_dot_exec__pb2.GetLoginDetailsRequest.SerializeToString,
40
+ response_deserializer=flwr_dot_proto_dot_exec__pb2.GetLoginDetailsResponse.FromString,
41
+ )
42
+ self.GetAuthTokens = channel.unary_unary(
43
+ '/flwr.proto.Exec/GetAuthTokens',
44
+ request_serializer=flwr_dot_proto_dot_exec__pb2.GetAuthTokensRequest.SerializeToString,
45
+ response_deserializer=flwr_dot_proto_dot_exec__pb2.GetAuthTokensResponse.FromString,
46
+ )
32
47
 
33
48
 
34
49
  class ExecServicer(object):
@@ -41,6 +56,13 @@ class ExecServicer(object):
41
56
  context.set_details('Method not implemented!')
42
57
  raise NotImplementedError('Method not implemented!')
43
58
 
59
+ def StopRun(self, request, context):
60
+ """Stop run upon request
61
+ """
62
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
63
+ context.set_details('Method not implemented!')
64
+ raise NotImplementedError('Method not implemented!')
65
+
44
66
  def StreamLogs(self, request, context):
45
67
  """Start log stream upon request
46
68
  """
@@ -55,6 +77,20 @@ class ExecServicer(object):
55
77
  context.set_details('Method not implemented!')
56
78
  raise NotImplementedError('Method not implemented!')
57
79
 
80
+ def GetLoginDetails(self, request, context):
81
+ """Get login details upon request
82
+ """
83
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
84
+ context.set_details('Method not implemented!')
85
+ raise NotImplementedError('Method not implemented!')
86
+
87
+ def GetAuthTokens(self, request, context):
88
+ """Get auth tokens upon request
89
+ """
90
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
91
+ context.set_details('Method not implemented!')
92
+ raise NotImplementedError('Method not implemented!')
93
+
58
94
 
59
95
  def add_ExecServicer_to_server(servicer, server):
60
96
  rpc_method_handlers = {
@@ -63,6 +99,11 @@ def add_ExecServicer_to_server(servicer, server):
63
99
  request_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.FromString,
64
100
  response_serializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.SerializeToString,
65
101
  ),
102
+ 'StopRun': grpc.unary_unary_rpc_method_handler(
103
+ servicer.StopRun,
104
+ request_deserializer=flwr_dot_proto_dot_exec__pb2.StopRunRequest.FromString,
105
+ response_serializer=flwr_dot_proto_dot_exec__pb2.StopRunResponse.SerializeToString,
106
+ ),
66
107
  'StreamLogs': grpc.unary_stream_rpc_method_handler(
67
108
  servicer.StreamLogs,
68
109
  request_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.FromString,
@@ -73,6 +114,16 @@ def add_ExecServicer_to_server(servicer, server):
73
114
  request_deserializer=flwr_dot_proto_dot_exec__pb2.ListRunsRequest.FromString,
74
115
  response_serializer=flwr_dot_proto_dot_exec__pb2.ListRunsResponse.SerializeToString,
75
116
  ),
117
+ 'GetLoginDetails': grpc.unary_unary_rpc_method_handler(
118
+ servicer.GetLoginDetails,
119
+ request_deserializer=flwr_dot_proto_dot_exec__pb2.GetLoginDetailsRequest.FromString,
120
+ response_serializer=flwr_dot_proto_dot_exec__pb2.GetLoginDetailsResponse.SerializeToString,
121
+ ),
122
+ 'GetAuthTokens': grpc.unary_unary_rpc_method_handler(
123
+ servicer.GetAuthTokens,
124
+ request_deserializer=flwr_dot_proto_dot_exec__pb2.GetAuthTokensRequest.FromString,
125
+ response_serializer=flwr_dot_proto_dot_exec__pb2.GetAuthTokensResponse.SerializeToString,
126
+ ),
76
127
  }
77
128
  generic_handler = grpc.method_handlers_generic_handler(
78
129
  'flwr.proto.Exec', rpc_method_handlers)
@@ -100,6 +151,23 @@ class Exec(object):
100
151
  options, channel_credentials,
101
152
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
102
153
 
154
+ @staticmethod
155
+ def StopRun(request,
156
+ target,
157
+ options=(),
158
+ channel_credentials=None,
159
+ call_credentials=None,
160
+ insecure=False,
161
+ compression=None,
162
+ wait_for_ready=None,
163
+ timeout=None,
164
+ metadata=None):
165
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Exec/StopRun',
166
+ flwr_dot_proto_dot_exec__pb2.StopRunRequest.SerializeToString,
167
+ flwr_dot_proto_dot_exec__pb2.StopRunResponse.FromString,
168
+ options, channel_credentials,
169
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
170
+
103
171
  @staticmethod
104
172
  def StreamLogs(request,
105
173
  target,
@@ -133,3 +201,37 @@ class Exec(object):
133
201
  flwr_dot_proto_dot_exec__pb2.ListRunsResponse.FromString,
134
202
  options, channel_credentials,
135
203
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
204
+
205
+ @staticmethod
206
+ def GetLoginDetails(request,
207
+ target,
208
+ options=(),
209
+ channel_credentials=None,
210
+ call_credentials=None,
211
+ insecure=False,
212
+ compression=None,
213
+ wait_for_ready=None,
214
+ timeout=None,
215
+ metadata=None):
216
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Exec/GetLoginDetails',
217
+ flwr_dot_proto_dot_exec__pb2.GetLoginDetailsRequest.SerializeToString,
218
+ flwr_dot_proto_dot_exec__pb2.GetLoginDetailsResponse.FromString,
219
+ options, channel_credentials,
220
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
221
+
222
+ @staticmethod
223
+ def GetAuthTokens(request,
224
+ target,
225
+ options=(),
226
+ channel_credentials=None,
227
+ call_credentials=None,
228
+ insecure=False,
229
+ compression=None,
230
+ wait_for_ready=None,
231
+ timeout=None,
232
+ metadata=None):
233
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Exec/GetAuthTokens',
234
+ flwr_dot_proto_dot_exec__pb2.GetAuthTokensRequest.SerializeToString,
235
+ flwr_dot_proto_dot_exec__pb2.GetAuthTokensResponse.FromString,
236
+ options, channel_credentials,
237
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -14,6 +14,11 @@ class ExecStub:
14
14
  flwr.proto.exec_pb2.StartRunResponse]
15
15
  """Start run upon request"""
16
16
 
17
+ StopRun: grpc.UnaryUnaryMultiCallable[
18
+ flwr.proto.exec_pb2.StopRunRequest,
19
+ flwr.proto.exec_pb2.StopRunResponse]
20
+ """Stop run upon request"""
21
+
17
22
  StreamLogs: grpc.UnaryStreamMultiCallable[
18
23
  flwr.proto.exec_pb2.StreamLogsRequest,
19
24
  flwr.proto.exec_pb2.StreamLogsResponse]
@@ -24,6 +29,16 @@ class ExecStub:
24
29
  flwr.proto.exec_pb2.ListRunsResponse]
25
30
  """flwr ls command"""
26
31
 
32
+ GetLoginDetails: grpc.UnaryUnaryMultiCallable[
33
+ flwr.proto.exec_pb2.GetLoginDetailsRequest,
34
+ flwr.proto.exec_pb2.GetLoginDetailsResponse]
35
+ """Get login details upon request"""
36
+
37
+ GetAuthTokens: grpc.UnaryUnaryMultiCallable[
38
+ flwr.proto.exec_pb2.GetAuthTokensRequest,
39
+ flwr.proto.exec_pb2.GetAuthTokensResponse]
40
+ """Get auth tokens upon request"""
41
+
27
42
 
28
43
  class ExecServicer(metaclass=abc.ABCMeta):
29
44
  @abc.abstractmethod
@@ -34,6 +49,14 @@ class ExecServicer(metaclass=abc.ABCMeta):
34
49
  """Start run upon request"""
35
50
  pass
36
51
 
52
+ @abc.abstractmethod
53
+ def StopRun(self,
54
+ request: flwr.proto.exec_pb2.StopRunRequest,
55
+ context: grpc.ServicerContext,
56
+ ) -> flwr.proto.exec_pb2.StopRunResponse:
57
+ """Stop run upon request"""
58
+ pass
59
+
37
60
  @abc.abstractmethod
38
61
  def StreamLogs(self,
39
62
  request: flwr.proto.exec_pb2.StreamLogsRequest,
@@ -50,5 +73,21 @@ class ExecServicer(metaclass=abc.ABCMeta):
50
73
  """flwr ls command"""
51
74
  pass
52
75
 
76
+ @abc.abstractmethod
77
+ def GetLoginDetails(self,
78
+ request: flwr.proto.exec_pb2.GetLoginDetailsRequest,
79
+ context: grpc.ServicerContext,
80
+ ) -> flwr.proto.exec_pb2.GetLoginDetailsResponse:
81
+ """Get login details upon request"""
82
+ pass
83
+
84
+ @abc.abstractmethod
85
+ def GetAuthTokens(self,
86
+ request: flwr.proto.exec_pb2.GetAuthTokensRequest,
87
+ context: grpc.ServicerContext,
88
+ ) -> flwr.proto.exec_pb2.GetAuthTokensResponse:
89
+ """Get auth tokens upon request"""
90
+ pass
91
+
53
92
 
54
93
  def add_ExecServicer_to_server(servicer: ExecServicer, server: grpc.Server) -> None: ...
flwr/proto/fab_pb2.py CHANGED
@@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default()
15
15
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"(\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"A\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"(\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"Q\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -25,7 +25,7 @@ if _descriptor._USE_C_DESCRIPTORS == False:
25
25
  _globals['_FAB']._serialized_start=59
26
26
  _globals['_FAB']._serialized_end=99
27
27
  _globals['_GETFABREQUEST']._serialized_start=101
28
- _globals['_GETFABREQUEST']._serialized_end=166
29
- _globals['_GETFABRESPONSE']._serialized_start=168
30
- _globals['_GETFABRESPONSE']._serialized_end=214
28
+ _globals['_GETFABREQUEST']._serialized_end=182
29
+ _globals['_GETFABRESPONSE']._serialized_start=184
30
+ _globals['_GETFABRESPONSE']._serialized_end=230
31
31
  # @@protoc_insertion_point(module_scope)
flwr/proto/fab_pb2.pyi CHANGED
@@ -36,16 +36,19 @@ class GetFabRequest(google.protobuf.message.Message):
36
36
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
37
37
  NODE_FIELD_NUMBER: builtins.int
38
38
  HASH_STR_FIELD_NUMBER: builtins.int
39
+ RUN_ID_FIELD_NUMBER: builtins.int
39
40
  @property
40
41
  def node(self) -> flwr.proto.node_pb2.Node: ...
41
42
  hash_str: typing.Text
43
+ run_id: builtins.int
42
44
  def __init__(self,
43
45
  *,
44
46
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
45
47
  hash_str: typing.Text = ...,
48
+ run_id: builtins.int = ...,
46
49
  ) -> None: ...
47
50
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
48
- def ClearField(self, field_name: typing_extensions.Literal["hash_str",b"hash_str","node",b"node"]) -> None: ...
51
+ def ClearField(self, field_name: typing_extensions.Literal["hash_str",b"hash_str","node",b"node","run_id",b"run_id"]) -> None: ...
49
52
  global___GetFabRequest = GetFabRequest
50
53
 
51
54
  class GetFabResponse(google.protobuf.message.Message):