flwr-nightly 1.13.0.dev20241106__py3-none-any.whl → 1.13.0.dev20241117__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.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- flwr/cli/app.py +2 -0
- flwr/cli/build.py +37 -0
- flwr/cli/install.py +5 -3
- flwr/cli/ls.py +228 -0
- flwr/cli/run/run.py +16 -5
- flwr/client/app.py +68 -19
- flwr/client/clientapp/app.py +51 -35
- flwr/client/grpc_rere_client/connection.py +2 -12
- flwr/client/nodestate/__init__.py +25 -0
- flwr/client/nodestate/in_memory_nodestate.py +38 -0
- flwr/client/nodestate/nodestate.py +30 -0
- flwr/client/nodestate/nodestate_factory.py +37 -0
- flwr/client/rest_client/connection.py +4 -14
- flwr/client/supernode/app.py +57 -53
- flwr/common/args.py +148 -0
- flwr/common/config.py +10 -0
- flwr/common/constant.py +21 -7
- flwr/common/date.py +18 -0
- flwr/common/logger.py +6 -2
- flwr/common/object_ref.py +47 -16
- flwr/common/serde.py +10 -0
- flwr/common/typing.py +32 -11
- flwr/proto/exec_pb2.py +23 -17
- flwr/proto/exec_pb2.pyi +50 -20
- flwr/proto/exec_pb2_grpc.py +34 -0
- flwr/proto/exec_pb2_grpc.pyi +13 -0
- flwr/proto/run_pb2.py +32 -27
- flwr/proto/run_pb2.pyi +44 -1
- flwr/proto/simulationio_pb2.py +2 -2
- flwr/proto/simulationio_pb2_grpc.py +34 -0
- flwr/proto/simulationio_pb2_grpc.pyi +13 -0
- flwr/server/app.py +83 -87
- flwr/server/driver/driver.py +1 -1
- flwr/server/driver/grpc_driver.py +6 -20
- flwr/server/driver/inmemory_driver.py +1 -3
- flwr/server/run_serverapp.py +8 -238
- flwr/server/serverapp/app.py +44 -89
- flwr/server/strategy/aggregate.py +4 -4
- flwr/server/superlink/fleet/rest_rere/rest_api.py +10 -9
- flwr/server/superlink/linkstate/in_memory_linkstate.py +76 -62
- flwr/server/superlink/linkstate/linkstate.py +24 -9
- flwr/server/superlink/linkstate/sqlite_linkstate.py +87 -128
- flwr/server/superlink/linkstate/utils.py +191 -32
- flwr/server/superlink/simulation/simulationio_servicer.py +22 -1
- flwr/simulation/__init__.py +3 -1
- flwr/simulation/app.py +245 -352
- flwr/simulation/legacy_app.py +402 -0
- flwr/simulation/run_simulation.py +8 -19
- flwr/simulation/simulationio_connection.py +2 -2
- flwr/superexec/deployment.py +13 -7
- flwr/superexec/exec_servicer.py +32 -3
- flwr/superexec/executor.py +4 -3
- flwr/superexec/simulation.py +52 -145
- {flwr_nightly-1.13.0.dev20241106.dist-info → flwr_nightly-1.13.0.dev20241117.dist-info}/METADATA +10 -7
- {flwr_nightly-1.13.0.dev20241106.dist-info → flwr_nightly-1.13.0.dev20241117.dist-info}/RECORD +58 -51
- {flwr_nightly-1.13.0.dev20241106.dist-info → flwr_nightly-1.13.0.dev20241117.dist-info}/entry_points.txt +1 -0
- {flwr_nightly-1.13.0.dev20241106.dist-info → flwr_nightly-1.13.0.dev20241117.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241106.dist-info → flwr_nightly-1.13.0.dev20241117.dist-info}/WHEEL +0 -0
flwr/common/constant.py
CHANGED
|
@@ -38,17 +38,30 @@ TRANSPORT_TYPES = [
|
|
|
38
38
|
]
|
|
39
39
|
|
|
40
40
|
# Addresses
|
|
41
|
+
# Ports
|
|
42
|
+
CLIENTAPPIO_PORT = "9094"
|
|
43
|
+
SERVERAPPIO_PORT = "9091"
|
|
44
|
+
FLEETAPI_GRPC_RERE_PORT = "9092"
|
|
45
|
+
FLEETAPI_PORT = "9095"
|
|
46
|
+
EXEC_API_PORT = "9093"
|
|
47
|
+
SIMULATIONIO_PORT = "9096"
|
|
48
|
+
# Octets
|
|
49
|
+
SERVER_OCTET = "0.0.0.0"
|
|
50
|
+
CLIENT_OCTET = "127.0.0.1"
|
|
41
51
|
# SuperNode
|
|
42
|
-
|
|
52
|
+
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{CLIENTAPPIO_PORT}"
|
|
53
|
+
CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{CLIENTAPPIO_PORT}"
|
|
43
54
|
# SuperLink
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SERVERAPPIO_PORT}"
|
|
56
|
+
SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SERVERAPPIO_PORT}"
|
|
57
|
+
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_GRPC_RERE_PORT}"
|
|
46
58
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
|
|
47
59
|
"[::]:8080" # IPv6 to keep start_server compatible
|
|
48
60
|
)
|
|
49
|
-
FLEET_API_REST_DEFAULT_ADDRESS = "
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
FLEET_API_REST_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_PORT}"
|
|
62
|
+
EXEC_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{EXEC_API_PORT}"
|
|
63
|
+
SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SIMULATIONIO_PORT}"
|
|
64
|
+
SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SIMULATIONIO_PORT}"
|
|
52
65
|
|
|
53
66
|
# Constants for ping
|
|
54
67
|
PING_DEFAULT_INTERVAL = 30
|
|
@@ -134,7 +147,8 @@ class ErrorCode:
|
|
|
134
147
|
UNKNOWN = 0
|
|
135
148
|
LOAD_CLIENT_APP_EXCEPTION = 1
|
|
136
149
|
CLIENT_APP_RAISED_EXCEPTION = 2
|
|
137
|
-
|
|
150
|
+
MESSAGE_UNAVAILABLE = 3
|
|
151
|
+
REPLY_MESSAGE_UNAVAILABLE = 4
|
|
138
152
|
|
|
139
153
|
def __new__(cls) -> ErrorCode:
|
|
140
154
|
"""Prevent instantiation."""
|
flwr/common/date.py
CHANGED
|
@@ -21,3 +21,21 @@ import datetime
|
|
|
21
21
|
def now() -> datetime.datetime:
|
|
22
22
|
"""Construct a datetime from time.time() with time zone set to UTC."""
|
|
23
23
|
return datetime.datetime.now(tz=datetime.timezone.utc)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def format_timedelta(td: datetime.timedelta) -> str:
|
|
27
|
+
"""Format a timedelta as a string."""
|
|
28
|
+
days = td.days
|
|
29
|
+
hours, remainder = divmod(td.seconds, 3600)
|
|
30
|
+
minutes, seconds = divmod(remainder, 60)
|
|
31
|
+
|
|
32
|
+
if days > 0:
|
|
33
|
+
return f"{days}d {hours:02}:{minutes:02}:{seconds:02}"
|
|
34
|
+
return f"{hours:02}:{minutes:02}:{seconds:02}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def isoformat8601_utc(dt: datetime.datetime) -> str:
|
|
38
|
+
"""Return the datetime formatted as an ISO 8601 string with a trailing 'Z'."""
|
|
39
|
+
if dt.tzinfo != datetime.timezone.utc:
|
|
40
|
+
raise ValueError("Expected datetime with timezone set to UTC")
|
|
41
|
+
return dt.isoformat(timespec="seconds").replace("+00:00", "Z")
|
flwr/common/logger.py
CHANGED
|
@@ -22,13 +22,14 @@ import time
|
|
|
22
22
|
from logging import WARN, LogRecord
|
|
23
23
|
from logging.handlers import HTTPHandler
|
|
24
24
|
from queue import Empty, Queue
|
|
25
|
-
from typing import TYPE_CHECKING, Any, Optional, TextIO
|
|
25
|
+
from typing import TYPE_CHECKING, Any, Optional, TextIO, Union
|
|
26
26
|
|
|
27
27
|
import grpc
|
|
28
28
|
|
|
29
29
|
from flwr.proto.log_pb2 import PushLogsRequest # pylint: disable=E0611
|
|
30
30
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
31
31
|
from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub # pylint: disable=E0611
|
|
32
|
+
from flwr.proto.simulationio_pb2_grpc import SimulationIoStub # pylint: disable=E0611
|
|
32
33
|
|
|
33
34
|
from .constant import LOG_UPLOAD_INTERVAL
|
|
34
35
|
|
|
@@ -346,7 +347,10 @@ def _log_uploader(
|
|
|
346
347
|
|
|
347
348
|
|
|
348
349
|
def start_log_uploader(
|
|
349
|
-
log_queue: Queue[Optional[str]],
|
|
350
|
+
log_queue: Queue[Optional[str]],
|
|
351
|
+
node_id: int,
|
|
352
|
+
run_id: int,
|
|
353
|
+
stub: Union[ServerAppIoStub, SimulationIoStub],
|
|
350
354
|
) -> threading.Thread:
|
|
351
355
|
"""Start the log uploader thread and return it."""
|
|
352
356
|
thread = threading.Thread(
|
flwr/common/object_ref.py
CHANGED
|
@@ -55,8 +55,8 @@ def validate(
|
|
|
55
55
|
specified attribute within it.
|
|
56
56
|
project_dir : Optional[Union[str, Path]] (default: None)
|
|
57
57
|
The directory containing the module. If None, the current working directory
|
|
58
|
-
is used. If `check_module` is True, the `project_dir` will be
|
|
59
|
-
the system path
|
|
58
|
+
is used. If `check_module` is True, the `project_dir` will be temporarily
|
|
59
|
+
inserted into the system path and then removed after the validation is complete.
|
|
60
60
|
|
|
61
61
|
Returns
|
|
62
62
|
-------
|
|
@@ -66,8 +66,8 @@ def validate(
|
|
|
66
66
|
|
|
67
67
|
Note
|
|
68
68
|
----
|
|
69
|
-
This function will modify `sys.path` by inserting the provided
|
|
70
|
-
|
|
69
|
+
This function will temporarily modify `sys.path` by inserting the provided
|
|
70
|
+
`project_dir`, which will be removed after the validation is complete.
|
|
71
71
|
"""
|
|
72
72
|
module_str, _, attributes_str = module_attribute_str.partition(":")
|
|
73
73
|
if not module_str:
|
|
@@ -82,11 +82,19 @@ def validate(
|
|
|
82
82
|
)
|
|
83
83
|
|
|
84
84
|
if check_module:
|
|
85
|
+
if project_dir is None:
|
|
86
|
+
project_dir = Path.cwd()
|
|
87
|
+
project_dir = Path(project_dir).absolute()
|
|
85
88
|
# Set the system path
|
|
86
|
-
|
|
89
|
+
sys.path.insert(0, str(project_dir))
|
|
87
90
|
|
|
88
91
|
# Load module
|
|
89
92
|
module = find_spec(module_str)
|
|
93
|
+
|
|
94
|
+
# Unset the system path
|
|
95
|
+
sys.path.remove(str(project_dir))
|
|
96
|
+
|
|
97
|
+
# Check if the module and the attribute exist
|
|
90
98
|
if module and module.origin:
|
|
91
99
|
if not _find_attribute_in_module(module.origin, attributes_str):
|
|
92
100
|
return (
|
|
@@ -133,8 +141,10 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
133
141
|
|
|
134
142
|
Note
|
|
135
143
|
----
|
|
136
|
-
This function will
|
|
137
|
-
|
|
144
|
+
- This function will unload all modules in the previously provided `project_dir`,
|
|
145
|
+
if it is invoked again.
|
|
146
|
+
- This function will modify `sys.path` by inserting the provided `project_dir`
|
|
147
|
+
and removing the previously inserted `project_dir`.
|
|
138
148
|
"""
|
|
139
149
|
valid, error_msg = validate(module_attribute_str, check_module=False)
|
|
140
150
|
if not valid and error_msg:
|
|
@@ -143,8 +153,19 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
143
153
|
module_str, _, attributes_str = module_attribute_str.partition(":")
|
|
144
154
|
|
|
145
155
|
try:
|
|
156
|
+
# Initialize project path
|
|
157
|
+
if project_dir is None:
|
|
158
|
+
project_dir = Path.cwd()
|
|
159
|
+
project_dir = Path(project_dir).absolute()
|
|
160
|
+
|
|
161
|
+
# Unload modules if the project directory has changed
|
|
162
|
+
if _current_sys_path and _current_sys_path != str(project_dir):
|
|
163
|
+
_unload_modules(Path(_current_sys_path))
|
|
164
|
+
|
|
165
|
+
# Set the system path
|
|
146
166
|
_set_sys_path(project_dir)
|
|
147
167
|
|
|
168
|
+
# Import the module
|
|
148
169
|
if module_str not in sys.modules:
|
|
149
170
|
module = importlib.import_module(module_str)
|
|
150
171
|
# Hack: `tabnet` does not work with `importlib.reload`
|
|
@@ -160,15 +181,7 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
160
181
|
module = sys.modules[module_str]
|
|
161
182
|
else:
|
|
162
183
|
module = sys.modules[module_str]
|
|
163
|
-
|
|
164
|
-
if project_dir is None:
|
|
165
|
-
project_dir = Path.cwd()
|
|
166
|
-
|
|
167
|
-
# Reload cached modules in the project directory
|
|
168
|
-
for m in list(sys.modules.values()):
|
|
169
|
-
path: Optional[str] = getattr(m, "__file__", None)
|
|
170
|
-
if path is not None and path.startswith(str(project_dir)):
|
|
171
|
-
importlib.reload(m)
|
|
184
|
+
_reload_modules(project_dir)
|
|
172
185
|
|
|
173
186
|
except ModuleNotFoundError as err:
|
|
174
187
|
raise error_type(
|
|
@@ -189,6 +202,24 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
189
202
|
return attribute
|
|
190
203
|
|
|
191
204
|
|
|
205
|
+
def _unload_modules(project_dir: Path) -> None:
|
|
206
|
+
"""Unload modules from the project directory."""
|
|
207
|
+
dir_str = str(project_dir.absolute())
|
|
208
|
+
for name, m in list(sys.modules.items()):
|
|
209
|
+
path: Optional[str] = getattr(m, "__file__", None)
|
|
210
|
+
if path is not None and path.startswith(dir_str):
|
|
211
|
+
del sys.modules[name]
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def _reload_modules(project_dir: Path) -> None:
|
|
215
|
+
"""Reload modules from the project directory."""
|
|
216
|
+
dir_str = str(project_dir.absolute())
|
|
217
|
+
for m in list(sys.modules.values()):
|
|
218
|
+
path: Optional[str] = getattr(m, "__file__", None)
|
|
219
|
+
if path is not None and path.startswith(dir_str):
|
|
220
|
+
importlib.reload(m)
|
|
221
|
+
|
|
222
|
+
|
|
192
223
|
def _set_sys_path(directory: Optional[Union[str, Path]]) -> None:
|
|
193
224
|
"""Set the system path."""
|
|
194
225
|
if directory is None:
|
flwr/common/serde.py
CHANGED
|
@@ -872,6 +872,11 @@ def run_to_proto(run: typing.Run) -> ProtoRun:
|
|
|
872
872
|
fab_version=run.fab_version,
|
|
873
873
|
fab_hash=run.fab_hash,
|
|
874
874
|
override_config=user_config_to_proto(run.override_config),
|
|
875
|
+
pending_at=run.pending_at,
|
|
876
|
+
starting_at=run.starting_at,
|
|
877
|
+
running_at=run.running_at,
|
|
878
|
+
finished_at=run.finished_at,
|
|
879
|
+
status=run_status_to_proto(run.status),
|
|
875
880
|
)
|
|
876
881
|
return proto
|
|
877
882
|
|
|
@@ -884,6 +889,11 @@ def run_from_proto(run_proto: ProtoRun) -> typing.Run:
|
|
|
884
889
|
fab_version=run_proto.fab_version,
|
|
885
890
|
fab_hash=run_proto.fab_hash,
|
|
886
891
|
override_config=user_config_from_proto(run_proto.override_config),
|
|
892
|
+
pending_at=run_proto.pending_at,
|
|
893
|
+
starting_at=run_proto.starting_at,
|
|
894
|
+
running_at=run_proto.running_at,
|
|
895
|
+
finished_at=run_proto.finished_at,
|
|
896
|
+
status=run_status_from_proto(run_proto.status),
|
|
887
897
|
)
|
|
888
898
|
return run
|
|
889
899
|
|
flwr/common/typing.py
CHANGED
|
@@ -24,7 +24,7 @@ import numpy.typing as npt
|
|
|
24
24
|
|
|
25
25
|
NDArray = npt.NDArray[Any]
|
|
26
26
|
NDArrayInt = npt.NDArray[np.int_]
|
|
27
|
-
NDArrayFloat = npt.NDArray[np.
|
|
27
|
+
NDArrayFloat = npt.NDArray[np.float64]
|
|
28
28
|
NDArrays = list[NDArray]
|
|
29
29
|
|
|
30
30
|
# The following union type contains Python types corresponding to ProtoBuf types that
|
|
@@ -208,7 +208,16 @@ class ClientMessage:
|
|
|
208
208
|
|
|
209
209
|
|
|
210
210
|
@dataclass
|
|
211
|
-
class
|
|
211
|
+
class RunStatus:
|
|
212
|
+
"""Run status information."""
|
|
213
|
+
|
|
214
|
+
status: str
|
|
215
|
+
sub_status: str
|
|
216
|
+
details: str
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
@dataclass
|
|
220
|
+
class Run: # pylint: disable=too-many-instance-attributes
|
|
212
221
|
"""Run details."""
|
|
213
222
|
|
|
214
223
|
run_id: int
|
|
@@ -216,15 +225,27 @@ class Run:
|
|
|
216
225
|
fab_version: str
|
|
217
226
|
fab_hash: str
|
|
218
227
|
override_config: UserConfig
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
+
pending_at: str
|
|
229
|
+
starting_at: str
|
|
230
|
+
running_at: str
|
|
231
|
+
finished_at: str
|
|
232
|
+
status: RunStatus
|
|
233
|
+
|
|
234
|
+
@classmethod
|
|
235
|
+
def create_empty(cls, run_id: int) -> "Run":
|
|
236
|
+
"""Return an empty Run instance."""
|
|
237
|
+
return cls(
|
|
238
|
+
run_id=run_id,
|
|
239
|
+
fab_id="",
|
|
240
|
+
fab_version="",
|
|
241
|
+
fab_hash="",
|
|
242
|
+
override_config={},
|
|
243
|
+
pending_at="",
|
|
244
|
+
starting_at="",
|
|
245
|
+
running_at="",
|
|
246
|
+
finished_at="",
|
|
247
|
+
status=RunStatus(status="", sub_status="", details=""),
|
|
248
|
+
)
|
|
228
249
|
|
|
229
250
|
|
|
230
251
|
@dataclass
|
flwr/proto/exec_pb2.py
CHANGED
|
@@ -14,9 +14,11 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
16
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
|
+
from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
|
18
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
17
19
|
|
|
18
20
|
|
|
19
|
-
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\"\
|
|
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')
|
|
20
22
|
|
|
21
23
|
_globals = globals()
|
|
22
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -25,20 +27,24 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
25
27
|
DESCRIPTOR._options = None
|
|
26
28
|
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
|
|
27
29
|
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
28
|
-
_globals['
|
|
29
|
-
_globals['
|
|
30
|
-
_globals['_STARTRUNREQUEST']._serialized_start=
|
|
31
|
-
_globals['_STARTRUNREQUEST']._serialized_end=
|
|
32
|
-
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=
|
|
33
|
-
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=
|
|
34
|
-
_globals['
|
|
35
|
-
_globals['
|
|
36
|
-
_globals['
|
|
37
|
-
_globals['
|
|
38
|
-
_globals['
|
|
39
|
-
_globals['
|
|
40
|
-
_globals['
|
|
41
|
-
_globals['
|
|
42
|
-
_globals['
|
|
43
|
-
_globals['
|
|
30
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
|
|
31
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
|
|
32
|
+
_globals['_STARTRUNREQUEST']._serialized_start=138
|
|
33
|
+
_globals['_STARTRUNREQUEST']._serialized_end=389
|
|
34
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=316
|
|
35
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=389
|
|
36
|
+
_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
|
|
44
50
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/exec_pb2.pyi
CHANGED
|
@@ -4,6 +4,8 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
|
+
import flwr.proto.recordset_pb2
|
|
8
|
+
import flwr.proto.run_pb2
|
|
7
9
|
import flwr.proto.transport_pb2
|
|
8
10
|
import google.protobuf.descriptor
|
|
9
11
|
import google.protobuf.internal.containers
|
|
@@ -30,38 +32,23 @@ class StartRunRequest(google.protobuf.message.Message):
|
|
|
30
32
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
31
33
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
32
34
|
|
|
33
|
-
class FederationConfigEntry(google.protobuf.message.Message):
|
|
34
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
35
|
-
KEY_FIELD_NUMBER: builtins.int
|
|
36
|
-
VALUE_FIELD_NUMBER: builtins.int
|
|
37
|
-
key: typing.Text
|
|
38
|
-
@property
|
|
39
|
-
def value(self) -> flwr.proto.transport_pb2.Scalar: ...
|
|
40
|
-
def __init__(self,
|
|
41
|
-
*,
|
|
42
|
-
key: typing.Text = ...,
|
|
43
|
-
value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
|
|
44
|
-
) -> None: ...
|
|
45
|
-
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
46
|
-
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
47
|
-
|
|
48
35
|
FAB_FIELD_NUMBER: builtins.int
|
|
49
36
|
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
50
|
-
|
|
37
|
+
FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
|
|
51
38
|
@property
|
|
52
39
|
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
53
40
|
@property
|
|
54
41
|
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
55
42
|
@property
|
|
56
|
-
def
|
|
43
|
+
def federation_options(self) -> flwr.proto.recordset_pb2.ConfigsRecord: ...
|
|
57
44
|
def __init__(self,
|
|
58
45
|
*,
|
|
59
46
|
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
60
47
|
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
61
|
-
|
|
48
|
+
federation_options: typing.Optional[flwr.proto.recordset_pb2.ConfigsRecord] = ...,
|
|
62
49
|
) -> None: ...
|
|
63
|
-
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
|
|
64
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","
|
|
50
|
+
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options"]) -> builtins.bool: ...
|
|
51
|
+
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
65
52
|
global___StartRunRequest = StartRunRequest
|
|
66
53
|
|
|
67
54
|
class StartRunResponse(google.protobuf.message.Message):
|
|
@@ -102,3 +89,46 @@ class StreamLogsResponse(google.protobuf.message.Message):
|
|
|
102
89
|
) -> None: ...
|
|
103
90
|
def ClearField(self, field_name: typing_extensions.Literal["latest_timestamp",b"latest_timestamp","log_output",b"log_output"]) -> None: ...
|
|
104
91
|
global___StreamLogsResponse = StreamLogsResponse
|
|
92
|
+
|
|
93
|
+
class ListRunsRequest(google.protobuf.message.Message):
|
|
94
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
95
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
96
|
+
run_id: builtins.int
|
|
97
|
+
def __init__(self,
|
|
98
|
+
*,
|
|
99
|
+
run_id: typing.Optional[builtins.int] = ...,
|
|
100
|
+
) -> None: ...
|
|
101
|
+
def HasField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> builtins.bool: ...
|
|
102
|
+
def ClearField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> None: ...
|
|
103
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["_run_id",b"_run_id"]) -> typing.Optional[typing_extensions.Literal["run_id"]]: ...
|
|
104
|
+
global___ListRunsRequest = ListRunsRequest
|
|
105
|
+
|
|
106
|
+
class ListRunsResponse(google.protobuf.message.Message):
|
|
107
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
108
|
+
class RunDictEntry(google.protobuf.message.Message):
|
|
109
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
110
|
+
KEY_FIELD_NUMBER: builtins.int
|
|
111
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
112
|
+
key: builtins.int
|
|
113
|
+
@property
|
|
114
|
+
def value(self) -> flwr.proto.run_pb2.Run: ...
|
|
115
|
+
def __init__(self,
|
|
116
|
+
*,
|
|
117
|
+
key: builtins.int = ...,
|
|
118
|
+
value: typing.Optional[flwr.proto.run_pb2.Run] = ...,
|
|
119
|
+
) -> None: ...
|
|
120
|
+
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
121
|
+
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
122
|
+
|
|
123
|
+
RUN_DICT_FIELD_NUMBER: builtins.int
|
|
124
|
+
NOW_FIELD_NUMBER: builtins.int
|
|
125
|
+
@property
|
|
126
|
+
def run_dict(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, flwr.proto.run_pb2.Run]: ...
|
|
127
|
+
now: typing.Text
|
|
128
|
+
def __init__(self,
|
|
129
|
+
*,
|
|
130
|
+
run_dict: typing.Optional[typing.Mapping[builtins.int, flwr.proto.run_pb2.Run]] = ...,
|
|
131
|
+
now: typing.Text = ...,
|
|
132
|
+
) -> None: ...
|
|
133
|
+
def ClearField(self, field_name: typing_extensions.Literal["now",b"now","run_dict",b"run_dict"]) -> None: ...
|
|
134
|
+
global___ListRunsResponse = ListRunsResponse
|
flwr/proto/exec_pb2_grpc.py
CHANGED
|
@@ -24,6 +24,11 @@ class ExecStub(object):
|
|
|
24
24
|
request_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
|
|
25
25
|
response_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
|
|
26
26
|
)
|
|
27
|
+
self.ListRuns = channel.unary_unary(
|
|
28
|
+
'/flwr.proto.Exec/ListRuns',
|
|
29
|
+
request_serializer=flwr_dot_proto_dot_exec__pb2.ListRunsRequest.SerializeToString,
|
|
30
|
+
response_deserializer=flwr_dot_proto_dot_exec__pb2.ListRunsResponse.FromString,
|
|
31
|
+
)
|
|
27
32
|
|
|
28
33
|
|
|
29
34
|
class ExecServicer(object):
|
|
@@ -43,6 +48,13 @@ class ExecServicer(object):
|
|
|
43
48
|
context.set_details('Method not implemented!')
|
|
44
49
|
raise NotImplementedError('Method not implemented!')
|
|
45
50
|
|
|
51
|
+
def ListRuns(self, request, context):
|
|
52
|
+
"""flwr ls command
|
|
53
|
+
"""
|
|
54
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
55
|
+
context.set_details('Method not implemented!')
|
|
56
|
+
raise NotImplementedError('Method not implemented!')
|
|
57
|
+
|
|
46
58
|
|
|
47
59
|
def add_ExecServicer_to_server(servicer, server):
|
|
48
60
|
rpc_method_handlers = {
|
|
@@ -56,6 +68,11 @@ def add_ExecServicer_to_server(servicer, server):
|
|
|
56
68
|
request_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.FromString,
|
|
57
69
|
response_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.SerializeToString,
|
|
58
70
|
),
|
|
71
|
+
'ListRuns': grpc.unary_unary_rpc_method_handler(
|
|
72
|
+
servicer.ListRuns,
|
|
73
|
+
request_deserializer=flwr_dot_proto_dot_exec__pb2.ListRunsRequest.FromString,
|
|
74
|
+
response_serializer=flwr_dot_proto_dot_exec__pb2.ListRunsResponse.SerializeToString,
|
|
75
|
+
),
|
|
59
76
|
}
|
|
60
77
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
61
78
|
'flwr.proto.Exec', rpc_method_handlers)
|
|
@@ -99,3 +116,20 @@ class Exec(object):
|
|
|
99
116
|
flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
|
|
100
117
|
options, channel_credentials,
|
|
101
118
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
119
|
+
|
|
120
|
+
@staticmethod
|
|
121
|
+
def ListRuns(request,
|
|
122
|
+
target,
|
|
123
|
+
options=(),
|
|
124
|
+
channel_credentials=None,
|
|
125
|
+
call_credentials=None,
|
|
126
|
+
insecure=False,
|
|
127
|
+
compression=None,
|
|
128
|
+
wait_for_ready=None,
|
|
129
|
+
timeout=None,
|
|
130
|
+
metadata=None):
|
|
131
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Exec/ListRuns',
|
|
132
|
+
flwr_dot_proto_dot_exec__pb2.ListRunsRequest.SerializeToString,
|
|
133
|
+
flwr_dot_proto_dot_exec__pb2.ListRunsResponse.FromString,
|
|
134
|
+
options, channel_credentials,
|
|
135
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
flwr/proto/exec_pb2_grpc.pyi
CHANGED
|
@@ -19,6 +19,11 @@ class ExecStub:
|
|
|
19
19
|
flwr.proto.exec_pb2.StreamLogsResponse]
|
|
20
20
|
"""Start log stream upon request"""
|
|
21
21
|
|
|
22
|
+
ListRuns: grpc.UnaryUnaryMultiCallable[
|
|
23
|
+
flwr.proto.exec_pb2.ListRunsRequest,
|
|
24
|
+
flwr.proto.exec_pb2.ListRunsResponse]
|
|
25
|
+
"""flwr ls command"""
|
|
26
|
+
|
|
22
27
|
|
|
23
28
|
class ExecServicer(metaclass=abc.ABCMeta):
|
|
24
29
|
@abc.abstractmethod
|
|
@@ -37,5 +42,13 @@ class ExecServicer(metaclass=abc.ABCMeta):
|
|
|
37
42
|
"""Start log stream upon request"""
|
|
38
43
|
pass
|
|
39
44
|
|
|
45
|
+
@abc.abstractmethod
|
|
46
|
+
def ListRuns(self,
|
|
47
|
+
request: flwr.proto.exec_pb2.ListRunsRequest,
|
|
48
|
+
context: grpc.ServicerContext,
|
|
49
|
+
) -> flwr.proto.exec_pb2.ListRunsResponse:
|
|
50
|
+
"""flwr ls command"""
|
|
51
|
+
pass
|
|
52
|
+
|
|
40
53
|
|
|
41
54
|
def add_ExecServicer_to_server(servicer: ExecServicer, server: grpc.Server) -> None: ...
|
flwr/proto/run_pb2.py
CHANGED
|
@@ -14,10 +14,11 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
16
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
17
|
+
from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
|
17
18
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
18
19
|
|
|
19
20
|
|
|
20
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/transport.proto\"\
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xce\x02\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\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\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\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\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"U\n\x1cGetFederationOptionsResponse\x12\x35\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecordb\x06proto3')
|
|
21
22
|
|
|
22
23
|
_globals = globals()
|
|
23
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -30,30 +31,34 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
30
31
|
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
31
32
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
|
|
32
33
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
|
|
33
|
-
_globals['_RUN']._serialized_start=
|
|
34
|
-
_globals['_RUN']._serialized_end=
|
|
35
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=
|
|
36
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=
|
|
37
|
-
_globals['_RUNSTATUS']._serialized_start=
|
|
38
|
-
_globals['_RUNSTATUS']._serialized_end=
|
|
39
|
-
_globals['_CREATERUNREQUEST']._serialized_start=
|
|
40
|
-
_globals['_CREATERUNREQUEST']._serialized_end=
|
|
41
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=
|
|
42
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=
|
|
43
|
-
_globals['_CREATERUNRESPONSE']._serialized_start=
|
|
44
|
-
_globals['_CREATERUNRESPONSE']._serialized_end=
|
|
45
|
-
_globals['_GETRUNREQUEST']._serialized_start=
|
|
46
|
-
_globals['_GETRUNREQUEST']._serialized_end=
|
|
47
|
-
_globals['_GETRUNRESPONSE']._serialized_start=
|
|
48
|
-
_globals['_GETRUNRESPONSE']._serialized_end=
|
|
49
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=
|
|
50
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=
|
|
51
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=
|
|
52
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=
|
|
53
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_start=
|
|
54
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_end=
|
|
55
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=
|
|
56
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=
|
|
57
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=
|
|
58
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=
|
|
34
|
+
_globals['_RUN']._serialized_start=138
|
|
35
|
+
_globals['_RUN']._serialized_end=472
|
|
36
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=399
|
|
37
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=472
|
|
38
|
+
_globals['_RUNSTATUS']._serialized_start=474
|
|
39
|
+
_globals['_RUNSTATUS']._serialized_end=538
|
|
40
|
+
_globals['_CREATERUNREQUEST']._serialized_start=541
|
|
41
|
+
_globals['_CREATERUNREQUEST']._serialized_end=776
|
|
42
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=399
|
|
43
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=472
|
|
44
|
+
_globals['_CREATERUNRESPONSE']._serialized_start=778
|
|
45
|
+
_globals['_CREATERUNRESPONSE']._serialized_end=813
|
|
46
|
+
_globals['_GETRUNREQUEST']._serialized_start=815
|
|
47
|
+
_globals['_GETRUNREQUEST']._serialized_end=878
|
|
48
|
+
_globals['_GETRUNRESPONSE']._serialized_start=880
|
|
49
|
+
_globals['_GETRUNRESPONSE']._serialized_end=926
|
|
50
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=928
|
|
51
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=1011
|
|
52
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=1013
|
|
53
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=1038
|
|
54
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_start=1040
|
|
55
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_end=1110
|
|
56
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=1113
|
|
57
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=1290
|
|
58
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=1215
|
|
59
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1290
|
|
60
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1292
|
|
61
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1337
|
|
62
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1339
|
|
63
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1424
|
|
59
64
|
# @@protoc_insertion_point(module_scope)
|