flwr-nightly 1.23.0.dev20251017__py3-none-any.whl → 1.23.0.dev20251020__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 CHANGED
@@ -28,9 +28,9 @@ from .new import new
28
28
  from .pull import pull
29
29
  from .run import run
30
30
  from .stop import stop
31
- from .supernode import create as supernode_create
32
- from .supernode import delete as supernode_delete
33
31
  from .supernode import ls as supernode_list
32
+ from .supernode import register as supernode_register
33
+ from .supernode import unregister as supernode_unregister
34
34
 
35
35
  app = typer.Typer(
36
36
  help=typer.style(
@@ -55,8 +55,8 @@ app.command()(pull)
55
55
 
56
56
  # Create supernode command group
57
57
  supernode_app = typer.Typer(help="Manage SuperNodes")
58
- supernode_app.command()(supernode_create)
59
- supernode_app.command()(supernode_delete)
58
+ supernode_app.command()(supernode_register)
59
+ supernode_app.command()(supernode_unregister)
60
60
  # Make it appear as "list"
61
61
  supernode_app.command("list")(supernode_list)
62
62
  # Hide "ls" command (left as alias)
@@ -14,12 +14,12 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `supernode` command."""
16
16
 
17
- from .create import create as create
18
- from .delete import delete as delete
19
17
  from .ls import ls as ls
18
+ from .register import register as register
19
+ from .unregister import unregister as unregister
20
20
 
21
21
  __all__ = [
22
- "create",
23
- "delete",
24
22
  "ls",
23
+ "register",
24
+ "unregister",
25
25
  ]
flwr/cli/supernode/ls.py CHANGED
@@ -36,8 +36,8 @@ from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
36
36
  from flwr.common.date import format_timedelta, isoformat8601_utc
37
37
  from flwr.common.logger import print_json_error, redirect_output, restore_output
38
38
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
39
- ListNodesCliRequest,
40
- ListNodesCliResponse,
39
+ ListNodesRequest,
40
+ ListNodesResponse,
41
41
  )
42
42
  from flwr.proto.control_pb2_grpc import ControlStub
43
43
  from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
@@ -135,9 +135,7 @@ def ls( # pylint: disable=R0914, R0913, R0917
135
135
  def _list_nodes(stub: ControlStub, dry_run: bool) -> list[_NodeListType]:
136
136
  """List all nodes."""
137
137
  with flwr_cli_grpc_exc_handler():
138
- res: ListNodesCliResponse = stub.ListNodesCli(
139
- ListNodesCliRequest(dry_run=dry_run)
140
- )
138
+ res: ListNodesResponse = stub.ListNodes(ListNodesRequest(dry_run=dry_run))
141
139
 
142
140
  return _format_nodes(list(res.nodes_info), res.now)
143
141
 
@@ -153,7 +151,9 @@ def _format_nodes(
153
151
 
154
152
  formatted_nodes: list[_NodeListType] = []
155
153
  # Add rows
156
- for node in sorted(nodes_info, key=lambda x: datetime.fromisoformat(x.created_at)):
154
+ for node in sorted(
155
+ nodes_info, key=lambda x: datetime.fromisoformat(x.registered_at)
156
+ ):
157
157
 
158
158
  # Calculate elapsed times
159
159
  elapsed_time_activated = timedelta()
@@ -168,10 +168,10 @@ def _format_nodes(
168
168
  node.node_id,
169
169
  node.owner_aid,
170
170
  node.status,
171
- _format_datetime(node.created_at),
171
+ _format_datetime(node.registered_at),
172
172
  _format_datetime(node.last_activated_at),
173
173
  _format_datetime(node.last_deactivated_at),
174
- _format_datetime(node.deleted_at),
174
+ _format_datetime(node.unregistered_at),
175
175
  format_timedelta(elapsed_time_activated),
176
176
  )
177
177
  )
@@ -200,7 +200,7 @@ def _to_table(nodes_info: list[_NodeListType], verbose: bool) -> Table:
200
200
  _,
201
201
  last_activated_at,
202
202
  last_deactivated_at,
203
- deleted_at,
203
+ unregistered_at,
204
204
  elapse_activated,
205
205
  ) = row
206
206
 
@@ -210,12 +210,12 @@ def _to_table(nodes_info: list[_NodeListType], verbose: bool) -> Table:
210
210
  elif status == "offline":
211
211
  status_style = "bright_yellow"
212
212
  time_at = last_deactivated_at
213
- elif status == "deleted":
213
+ elif status == "unregistered":
214
214
  if not verbose:
215
215
  continue
216
216
  status_style = "red"
217
- time_at = deleted_at
218
- elif status == "created":
217
+ time_at = unregistered_at
218
+ elif status == "registered":
219
219
  status_style = "blue"
220
220
  time_at = "N/A"
221
221
  else:
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower command line interface `supernode create` command."""
15
+ """Flower command line interface `supernode register` command."""
16
16
 
17
17
 
18
18
  import io
@@ -36,8 +36,8 @@ from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
36
36
  from flwr.common.exit import ExitCode, flwr_exit
37
37
  from flwr.common.logger import print_json_error, redirect_output, restore_output
38
38
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
39
- CreateNodeCliRequest,
40
- CreateNodeCliResponse,
39
+ RegisterNodeRequest,
40
+ RegisterNodeResponse,
41
41
  )
42
42
  from flwr.proto.control_pb2_grpc import ControlStub
43
43
  from flwr.supercore.primitives.asymmetric import public_key_to_bytes, uses_nist_ec_curve
@@ -45,7 +45,7 @@ from flwr.supercore.primitives.asymmetric import public_key_to_bytes, uses_nist_
45
45
  from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
46
46
 
47
47
 
48
- def create( # pylint: disable=R0914
48
+ def register( # pylint: disable=R0914
49
49
  public_key: Annotated[
50
50
  Path,
51
51
  typer.Argument(
@@ -90,7 +90,7 @@ def create( # pylint: disable=R0914
90
90
  federation, federation_config = validate_federation_in_project_config(
91
91
  federation, config
92
92
  )
93
- exit_if_no_address(federation_config, "supernode create")
93
+ exit_if_no_address(federation_config, "supernode register")
94
94
 
95
95
  channel = None
96
96
  try:
@@ -98,7 +98,7 @@ def create( # pylint: disable=R0914
98
98
  channel = init_channel(app, federation_config, auth_plugin)
99
99
  stub = ControlStub(channel) # pylint: disable=unused-variable # noqa: F841
100
100
 
101
- _create_node(
101
+ _register_node(
102
102
  stub=stub, public_key=public_key_bytes, output_format=output_format
103
103
  )
104
104
 
@@ -130,15 +130,16 @@ def create( # pylint: disable=R0914
130
130
  captured_output.close()
131
131
 
132
132
 
133
- def _create_node(stub: ControlStub, public_key: bytes, output_format: str) -> None:
134
- """Create a node."""
133
+ def _register_node(stub: ControlStub, public_key: bytes, output_format: str) -> None:
134
+ """Register a node."""
135
135
  with flwr_cli_grpc_exc_handler():
136
- response: CreateNodeCliResponse = stub.CreateNodeCli(
137
- request=CreateNodeCliRequest(public_key=public_key)
136
+ response: RegisterNodeResponse = stub.RegisterNode(
137
+ request=RegisterNodeRequest(public_key=public_key)
138
138
  )
139
139
  if response.node_id:
140
140
  typer.secho(
141
- f"✅ Node {response.node_id} created successfully.", fg=typer.colors.GREEN
141
+ f"✅ SuperNode {response.node_id} registered successfully.",
142
+ fg=typer.colors.GREEN,
142
143
  )
143
144
  if output_format == CliOutputFormat.JSON:
144
145
  run_output = json.dumps(
@@ -150,7 +151,7 @@ def _create_node(stub: ControlStub, public_key: bytes, output_format: str) -> No
150
151
  restore_output()
151
152
  Console().print_json(run_output)
152
153
  else:
153
- typer.secho("❌ Node couldn't be created.", fg=typer.colors.RED)
154
+ typer.secho("❌ SuperNode couldn't be registered.", fg=typer.colors.RED)
154
155
 
155
156
 
156
157
  def try_load_public_key(public_key_path: Path) -> bytes:
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower command line interface `supernode delete` command."""
15
+ """Flower command line interface `supernode unregister` command."""
16
16
 
17
17
 
18
18
  import io
@@ -31,13 +31,13 @@ from flwr.cli.config_utils import (
31
31
  )
32
32
  from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
33
33
  from flwr.common.logger import print_json_error, redirect_output, restore_output
34
- from flwr.proto.control_pb2 import DeleteNodeCliRequest # pylint: disable=E0611
34
+ from flwr.proto.control_pb2 import UnregisterNodeRequest # pylint: disable=E0611
35
35
  from flwr.proto.control_pb2_grpc import ControlStub
36
36
 
37
37
  from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
38
38
 
39
39
 
40
- def delete( # pylint: disable=R0914
40
+ def unregister( # pylint: disable=R0914
41
41
  node_id: Annotated[
42
42
  int,
43
43
  typer.Argument(
@@ -61,7 +61,7 @@ def delete( # pylint: disable=R0914
61
61
  ),
62
62
  ] = CliOutputFormat.DEFAULT,
63
63
  ) -> None:
64
- """Remove a SuperNode from the federation."""
64
+ """Unregister a SuperNode from the federation."""
65
65
  suppress_output = output_format == CliOutputFormat.JSON
66
66
  captured_output = io.StringIO()
67
67
 
@@ -78,7 +78,7 @@ def delete( # pylint: disable=R0914
78
78
  federation, federation_config = validate_federation_in_project_config(
79
79
  federation, config
80
80
  )
81
- exit_if_no_address(federation_config, "supernode remove")
81
+ exit_if_no_address(federation_config, "supernode unregister")
82
82
 
83
83
  channel = None
84
84
  try:
@@ -86,7 +86,7 @@ def delete( # pylint: disable=R0914
86
86
  channel = init_channel(app, federation_config, auth_plugin)
87
87
  stub = ControlStub(channel) # pylint: disable=unused-variable # noqa: F841
88
88
 
89
- _delete_node(stub=stub, node_id=node_id, output_format=output_format)
89
+ _unregister_node(stub=stub, node_id=node_id, output_format=output_format)
90
90
 
91
91
  except ValueError as err:
92
92
  typer.secho(
@@ -116,15 +116,17 @@ def delete( # pylint: disable=R0914
116
116
  captured_output.close()
117
117
 
118
118
 
119
- def _delete_node(
119
+ def _unregister_node(
120
120
  stub: ControlStub,
121
121
  node_id: int,
122
122
  output_format: str,
123
123
  ) -> None:
124
- """Delete a SuperNode from the federation."""
124
+ """Unregister a SuperNode from the federation."""
125
125
  with flwr_cli_grpc_exc_handler():
126
- stub.DeleteNodeCli(request=DeleteNodeCliRequest(node_id=node_id))
127
- typer.secho(f"✅ SuperNode {node_id} deleted successfully.", fg=typer.colors.GREEN)
126
+ stub.UnregisterNode(request=UnregisterNodeRequest(node_id=node_id))
127
+ typer.secho(
128
+ f"✅ SuperNode {node_id} unregistered successfully.", fg=typer.colors.GREEN
129
+ )
128
130
  if output_format == CliOutputFormat.JSON:
129
131
  run_output = json.dumps(
130
132
  {
@@ -43,6 +43,7 @@ class ExitCode:
43
43
  SUPERNODE_REST_ADDRESS_INVALID = 300
44
44
  # SUPERNODE_NODE_AUTH_KEYS_REQUIRED = 301 --- DELETED ---
45
45
  SUPERNODE_NODE_AUTH_KEY_INVALID = 302
46
+ SUPERNODE_STARTED_WITHOUT_TLS_BUT_NODE_AUTH_ENABLED = 303
46
47
 
47
48
  # SuperExec-specific exit codes (400-499)
48
49
  SUPEREXEC_INVALID_PLUGIN_CONFIG = 400
@@ -110,6 +111,10 @@ EXIT_CODE_HELP = {
110
111
  "Please ensure that the file path points to a valid private key "
111
112
  "file and try again."
112
113
  ),
114
+ ExitCode.SUPERNODE_STARTED_WITHOUT_TLS_BUT_NODE_AUTH_ENABLED: (
115
+ "The private key for SuperNode authentication was provided, but TLS is not "
116
+ "enabled. Node authentication can only be used when TLS is enabled."
117
+ ),
113
118
  # SuperExec-specific exit codes (400-499)
114
119
  ExitCode.SUPEREXEC_INVALID_PLUGIN_CONFIG: (
115
120
  "The YAML configuration for the SuperExec plugin is invalid."
flwr/proto/control_pb2.py CHANGED
@@ -19,7 +19,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
19
19
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
20
20
 
21
21
 
22
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"\xfa\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\x34\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord\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\"\x8b\x01\n\x17GetLoginDetailsResponse\x12\x12\n\nauthn_type\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65vice_code\x18\x02 \x01(\t\x12!\n\x19verification_uri_complete\x18\x03 \x01(\t\x12\x12\n\nexpires_in\x18\x04 \x01(\x03\x12\x10\n\x08interval\x18\x05 \x01(\x03\"+\n\x14GetAuthTokensRequest\x12\x13\n\x0b\x64\x65vice_code\x18\x01 \x01(\t\"D\n\x15GetAuthTokensResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x15\n\rrefresh_token\x18\x02 \x01(\t\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"&\n\x14PullArtifactsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"1\n\x15PullArtifactsResponse\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\"*\n\x14\x43reateNodeCliRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"9\n\x15\x43reateNodeCliResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"\'\n\x14\x44\x65leteNodeCliRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x17\n\x15\x44\x65leteNodeCliResponse\"&\n\x13ListNodesCliRequest\x12\x0f\n\x07\x64ry_run\x18\x01 \x01(\x08\"M\n\x14ListNodesCliResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xc5\x06\n\x07\x43ontrol\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\x12V\n\rPullArtifacts\x12 .flwr.proto.PullArtifactsRequest\x1a!.flwr.proto.PullArtifactsResponse\"\x00\x12V\n\rCreateNodeCli\x12 .flwr.proto.CreateNodeCliRequest\x1a!.flwr.proto.CreateNodeCliResponse\"\x00\x12V\n\rDeleteNodeCli\x12 .flwr.proto.DeleteNodeCliRequest\x1a!.flwr.proto.DeleteNodeCliResponse\"\x00\x12S\n\x0cListNodesCli\x12\x1f.flwr.proto.ListNodesCliRequest\x1a .flwr.proto.ListNodesCliResponse\"\x00\x62\x06proto3')
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"\xfa\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\x34\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord\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\"\x8b\x01\n\x17GetLoginDetailsResponse\x12\x12\n\nauthn_type\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65vice_code\x18\x02 \x01(\t\x12!\n\x19verification_uri_complete\x18\x03 \x01(\t\x12\x12\n\nexpires_in\x18\x04 \x01(\x03\x12\x10\n\x08interval\x18\x05 \x01(\x03\"+\n\x14GetAuthTokensRequest\x12\x13\n\x0b\x64\x65vice_code\x18\x01 \x01(\t\"D\n\x15GetAuthTokensResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x15\n\rrefresh_token\x18\x02 \x01(\t\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"&\n\x14PullArtifactsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"1\n\x15PullArtifactsResponse\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\")\n\x13RegisterNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"8\n\x14RegisterNodeResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"(\n\x15UnregisterNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x18\n\x16UnregisterNodeResponse\"#\n\x10ListNodesRequest\x12\x0f\n\x07\x64ry_run\x18\x01 \x01(\x08\"J\n\x11ListNodesResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xbc\x06\n\x07\x43ontrol\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\x12V\n\rPullArtifacts\x12 .flwr.proto.PullArtifactsRequest\x1a!.flwr.proto.PullArtifactsResponse\"\x00\x12S\n\x0cRegisterNode\x12\x1f.flwr.proto.RegisterNodeRequest\x1a .flwr.proto.RegisterNodeResponse\"\x00\x12Y\n\x0eUnregisterNode\x12!.flwr.proto.UnregisterNodeRequest\x1a\".flwr.proto.UnregisterNodeResponse\"\x00\x12J\n\tListNodes\x12\x1c.flwr.proto.ListNodesRequest\x1a\x1d.flwr.proto.ListNodesResponse\"\x00\x62\x06proto3')
23
23
 
24
24
  _globals = globals()
25
25
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -62,18 +62,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
62
62
  _globals['_PULLARTIFACTSREQUEST']._serialized_end=1201
63
63
  _globals['_PULLARTIFACTSRESPONSE']._serialized_start=1203
64
64
  _globals['_PULLARTIFACTSRESPONSE']._serialized_end=1252
65
- _globals['_CREATENODECLIREQUEST']._serialized_start=1254
66
- _globals['_CREATENODECLIREQUEST']._serialized_end=1296
67
- _globals['_CREATENODECLIRESPONSE']._serialized_start=1298
68
- _globals['_CREATENODECLIRESPONSE']._serialized_end=1355
69
- _globals['_DELETENODECLIREQUEST']._serialized_start=1357
70
- _globals['_DELETENODECLIREQUEST']._serialized_end=1396
71
- _globals['_DELETENODECLIRESPONSE']._serialized_start=1398
72
- _globals['_DELETENODECLIRESPONSE']._serialized_end=1421
73
- _globals['_LISTNODESCLIREQUEST']._serialized_start=1423
74
- _globals['_LISTNODESCLIREQUEST']._serialized_end=1461
75
- _globals['_LISTNODESCLIRESPONSE']._serialized_start=1463
76
- _globals['_LISTNODESCLIRESPONSE']._serialized_end=1540
77
- _globals['_CONTROL']._serialized_start=1543
78
- _globals['_CONTROL']._serialized_end=2380
65
+ _globals['_REGISTERNODEREQUEST']._serialized_start=1254
66
+ _globals['_REGISTERNODEREQUEST']._serialized_end=1295
67
+ _globals['_REGISTERNODERESPONSE']._serialized_start=1297
68
+ _globals['_REGISTERNODERESPONSE']._serialized_end=1353
69
+ _globals['_UNREGISTERNODEREQUEST']._serialized_start=1355
70
+ _globals['_UNREGISTERNODEREQUEST']._serialized_end=1395
71
+ _globals['_UNREGISTERNODERESPONSE']._serialized_start=1397
72
+ _globals['_UNREGISTERNODERESPONSE']._serialized_end=1421
73
+ _globals['_LISTNODESREQUEST']._serialized_start=1423
74
+ _globals['_LISTNODESREQUEST']._serialized_end=1458
75
+ _globals['_LISTNODESRESPONSE']._serialized_start=1460
76
+ _globals['_LISTNODESRESPONSE']._serialized_end=1534
77
+ _globals['_CONTROL']._serialized_start=1537
78
+ _globals['_CONTROL']._serialized_end=2365
79
79
  # @@protoc_insertion_point(module_scope)
@@ -236,7 +236,7 @@ class PullArtifactsResponse(google.protobuf.message.Message):
236
236
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_url",b"_url"]) -> typing.Optional[typing_extensions.Literal["url"]]: ...
237
237
  global___PullArtifactsResponse = PullArtifactsResponse
238
238
 
239
- class CreateNodeCliRequest(google.protobuf.message.Message):
239
+ class RegisterNodeRequest(google.protobuf.message.Message):
240
240
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
241
241
  PUBLIC_KEY_FIELD_NUMBER: builtins.int
242
242
  public_key: builtins.bytes
@@ -245,9 +245,9 @@ class CreateNodeCliRequest(google.protobuf.message.Message):
245
245
  public_key: builtins.bytes = ...,
246
246
  ) -> None: ...
247
247
  def ClearField(self, field_name: typing_extensions.Literal["public_key",b"public_key"]) -> None: ...
248
- global___CreateNodeCliRequest = CreateNodeCliRequest
248
+ global___RegisterNodeRequest = RegisterNodeRequest
249
249
 
250
- class CreateNodeCliResponse(google.protobuf.message.Message):
250
+ class RegisterNodeResponse(google.protobuf.message.Message):
251
251
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
252
252
  NODE_ID_FIELD_NUMBER: builtins.int
253
253
  node_id: builtins.int
@@ -258,9 +258,9 @@ class CreateNodeCliResponse(google.protobuf.message.Message):
258
258
  def HasField(self, field_name: typing_extensions.Literal["_node_id",b"_node_id","node_id",b"node_id"]) -> builtins.bool: ...
259
259
  def ClearField(self, field_name: typing_extensions.Literal["_node_id",b"_node_id","node_id",b"node_id"]) -> None: ...
260
260
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_node_id",b"_node_id"]) -> typing.Optional[typing_extensions.Literal["node_id"]]: ...
261
- global___CreateNodeCliResponse = CreateNodeCliResponse
261
+ global___RegisterNodeResponse = RegisterNodeResponse
262
262
 
263
- class DeleteNodeCliRequest(google.protobuf.message.Message):
263
+ class UnregisterNodeRequest(google.protobuf.message.Message):
264
264
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
265
265
  NODE_ID_FIELD_NUMBER: builtins.int
266
266
  node_id: builtins.int
@@ -269,15 +269,15 @@ class DeleteNodeCliRequest(google.protobuf.message.Message):
269
269
  node_id: builtins.int = ...,
270
270
  ) -> None: ...
271
271
  def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
272
- global___DeleteNodeCliRequest = DeleteNodeCliRequest
272
+ global___UnregisterNodeRequest = UnregisterNodeRequest
273
273
 
274
- class DeleteNodeCliResponse(google.protobuf.message.Message):
274
+ class UnregisterNodeResponse(google.protobuf.message.Message):
275
275
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
276
276
  def __init__(self,
277
277
  ) -> None: ...
278
- global___DeleteNodeCliResponse = DeleteNodeCliResponse
278
+ global___UnregisterNodeResponse = UnregisterNodeResponse
279
279
 
280
- class ListNodesCliRequest(google.protobuf.message.Message):
280
+ class ListNodesRequest(google.protobuf.message.Message):
281
281
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
282
282
  DRY_RUN_FIELD_NUMBER: builtins.int
283
283
  dry_run: builtins.bool
@@ -286,9 +286,9 @@ class ListNodesCliRequest(google.protobuf.message.Message):
286
286
  dry_run: builtins.bool = ...,
287
287
  ) -> None: ...
288
288
  def ClearField(self, field_name: typing_extensions.Literal["dry_run",b"dry_run"]) -> None: ...
289
- global___ListNodesCliRequest = ListNodesCliRequest
289
+ global___ListNodesRequest = ListNodesRequest
290
290
 
291
- class ListNodesCliResponse(google.protobuf.message.Message):
291
+ class ListNodesResponse(google.protobuf.message.Message):
292
292
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
293
293
  NODES_INFO_FIELD_NUMBER: builtins.int
294
294
  NOW_FIELD_NUMBER: builtins.int
@@ -301,4 +301,4 @@ class ListNodesCliResponse(google.protobuf.message.Message):
301
301
  now: typing.Text = ...,
302
302
  ) -> None: ...
303
303
  def ClearField(self, field_name: typing_extensions.Literal["nodes_info",b"nodes_info","now",b"now"]) -> None: ...
304
- global___ListNodesCliResponse = ListNodesCliResponse
304
+ global___ListNodesResponse = ListNodesResponse
@@ -49,20 +49,20 @@ class ControlStub(object):
49
49
  request_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.SerializeToString,
50
50
  response_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.FromString,
51
51
  )
52
- self.CreateNodeCli = channel.unary_unary(
53
- '/flwr.proto.Control/CreateNodeCli',
54
- request_serializer=flwr_dot_proto_dot_control__pb2.CreateNodeCliRequest.SerializeToString,
55
- response_deserializer=flwr_dot_proto_dot_control__pb2.CreateNodeCliResponse.FromString,
52
+ self.RegisterNode = channel.unary_unary(
53
+ '/flwr.proto.Control/RegisterNode',
54
+ request_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
55
+ response_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
56
56
  )
57
- self.DeleteNodeCli = channel.unary_unary(
58
- '/flwr.proto.Control/DeleteNodeCli',
59
- request_serializer=flwr_dot_proto_dot_control__pb2.DeleteNodeCliRequest.SerializeToString,
60
- response_deserializer=flwr_dot_proto_dot_control__pb2.DeleteNodeCliResponse.FromString,
57
+ self.UnregisterNode = channel.unary_unary(
58
+ '/flwr.proto.Control/UnregisterNode',
59
+ request_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
60
+ response_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
61
61
  )
62
- self.ListNodesCli = channel.unary_unary(
63
- '/flwr.proto.Control/ListNodesCli',
64
- request_serializer=flwr_dot_proto_dot_control__pb2.ListNodesCliRequest.SerializeToString,
65
- response_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesCliResponse.FromString,
62
+ self.ListNodes = channel.unary_unary(
63
+ '/flwr.proto.Control/ListNodes',
64
+ request_serializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
65
+ response_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
66
66
  )
67
67
 
68
68
 
@@ -118,21 +118,21 @@ class ControlServicer(object):
118
118
  context.set_details('Method not implemented!')
119
119
  raise NotImplementedError('Method not implemented!')
120
120
 
121
- def CreateNodeCli(self, request, context):
122
- """Add SuperNode
121
+ def RegisterNode(self, request, context):
122
+ """Register SuperNode
123
123
  """
124
124
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
125
125
  context.set_details('Method not implemented!')
126
126
  raise NotImplementedError('Method not implemented!')
127
127
 
128
- def DeleteNodeCli(self, request, context):
129
- """Remove SuperNode
128
+ def UnregisterNode(self, request, context):
129
+ """Unregister SuperNode
130
130
  """
131
131
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
132
132
  context.set_details('Method not implemented!')
133
133
  raise NotImplementedError('Method not implemented!')
134
134
 
135
- def ListNodesCli(self, request, context):
135
+ def ListNodes(self, request, context):
136
136
  """List SuperNodes
137
137
  """
138
138
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -177,20 +177,20 @@ def add_ControlServicer_to_server(servicer, server):
177
177
  request_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.FromString,
178
178
  response_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.SerializeToString,
179
179
  ),
180
- 'CreateNodeCli': grpc.unary_unary_rpc_method_handler(
181
- servicer.CreateNodeCli,
182
- request_deserializer=flwr_dot_proto_dot_control__pb2.CreateNodeCliRequest.FromString,
183
- response_serializer=flwr_dot_proto_dot_control__pb2.CreateNodeCliResponse.SerializeToString,
180
+ 'RegisterNode': grpc.unary_unary_rpc_method_handler(
181
+ servicer.RegisterNode,
182
+ request_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.FromString,
183
+ response_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.SerializeToString,
184
184
  ),
185
- 'DeleteNodeCli': grpc.unary_unary_rpc_method_handler(
186
- servicer.DeleteNodeCli,
187
- request_deserializer=flwr_dot_proto_dot_control__pb2.DeleteNodeCliRequest.FromString,
188
- response_serializer=flwr_dot_proto_dot_control__pb2.DeleteNodeCliResponse.SerializeToString,
185
+ 'UnregisterNode': grpc.unary_unary_rpc_method_handler(
186
+ servicer.UnregisterNode,
187
+ request_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.FromString,
188
+ response_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.SerializeToString,
189
189
  ),
190
- 'ListNodesCli': grpc.unary_unary_rpc_method_handler(
191
- servicer.ListNodesCli,
192
- request_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesCliRequest.FromString,
193
- response_serializer=flwr_dot_proto_dot_control__pb2.ListNodesCliResponse.SerializeToString,
190
+ 'ListNodes': grpc.unary_unary_rpc_method_handler(
191
+ servicer.ListNodes,
192
+ request_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.FromString,
193
+ response_serializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.SerializeToString,
194
194
  ),
195
195
  }
196
196
  generic_handler = grpc.method_handlers_generic_handler(
@@ -322,7 +322,7 @@ class Control(object):
322
322
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
323
323
 
324
324
  @staticmethod
325
- def CreateNodeCli(request,
325
+ def RegisterNode(request,
326
326
  target,
327
327
  options=(),
328
328
  channel_credentials=None,
@@ -332,14 +332,14 @@ class Control(object):
332
332
  wait_for_ready=None,
333
333
  timeout=None,
334
334
  metadata=None):
335
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/CreateNodeCli',
336
- flwr_dot_proto_dot_control__pb2.CreateNodeCliRequest.SerializeToString,
337
- flwr_dot_proto_dot_control__pb2.CreateNodeCliResponse.FromString,
335
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/RegisterNode',
336
+ flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
337
+ flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
338
338
  options, channel_credentials,
339
339
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
340
340
 
341
341
  @staticmethod
342
- def DeleteNodeCli(request,
342
+ def UnregisterNode(request,
343
343
  target,
344
344
  options=(),
345
345
  channel_credentials=None,
@@ -349,14 +349,14 @@ class Control(object):
349
349
  wait_for_ready=None,
350
350
  timeout=None,
351
351
  metadata=None):
352
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/DeleteNodeCli',
353
- flwr_dot_proto_dot_control__pb2.DeleteNodeCliRequest.SerializeToString,
354
- flwr_dot_proto_dot_control__pb2.DeleteNodeCliResponse.FromString,
352
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/UnregisterNode',
353
+ flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
354
+ flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
355
355
  options, channel_credentials,
356
356
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
357
357
 
358
358
  @staticmethod
359
- def ListNodesCli(request,
359
+ def ListNodes(request,
360
360
  target,
361
361
  options=(),
362
362
  channel_credentials=None,
@@ -366,8 +366,8 @@ class Control(object):
366
366
  wait_for_ready=None,
367
367
  timeout=None,
368
368
  metadata=None):
369
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/ListNodesCli',
370
- flwr_dot_proto_dot_control__pb2.ListNodesCliRequest.SerializeToString,
371
- flwr_dot_proto_dot_control__pb2.ListNodesCliResponse.FromString,
369
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/ListNodes',
370
+ flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
371
+ flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
372
372
  options, channel_credentials,
373
373
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -44,19 +44,19 @@ class ControlStub:
44
44
  flwr.proto.control_pb2.PullArtifactsResponse]
45
45
  """Pull artifacts generated during a run (flwr pull)"""
46
46
 
47
- CreateNodeCli: grpc.UnaryUnaryMultiCallable[
48
- flwr.proto.control_pb2.CreateNodeCliRequest,
49
- flwr.proto.control_pb2.CreateNodeCliResponse]
50
- """Add SuperNode"""
51
-
52
- DeleteNodeCli: grpc.UnaryUnaryMultiCallable[
53
- flwr.proto.control_pb2.DeleteNodeCliRequest,
54
- flwr.proto.control_pb2.DeleteNodeCliResponse]
55
- """Remove SuperNode"""
56
-
57
- ListNodesCli: grpc.UnaryUnaryMultiCallable[
58
- flwr.proto.control_pb2.ListNodesCliRequest,
59
- flwr.proto.control_pb2.ListNodesCliResponse]
47
+ RegisterNode: grpc.UnaryUnaryMultiCallable[
48
+ flwr.proto.control_pb2.RegisterNodeRequest,
49
+ flwr.proto.control_pb2.RegisterNodeResponse]
50
+ """Register SuperNode"""
51
+
52
+ UnregisterNode: grpc.UnaryUnaryMultiCallable[
53
+ flwr.proto.control_pb2.UnregisterNodeRequest,
54
+ flwr.proto.control_pb2.UnregisterNodeResponse]
55
+ """Unregister SuperNode"""
56
+
57
+ ListNodes: grpc.UnaryUnaryMultiCallable[
58
+ flwr.proto.control_pb2.ListNodesRequest,
59
+ flwr.proto.control_pb2.ListNodesResponse]
60
60
  """List SuperNodes"""
61
61
 
62
62
 
@@ -118,26 +118,26 @@ class ControlServicer(metaclass=abc.ABCMeta):
118
118
  pass
119
119
 
120
120
  @abc.abstractmethod
121
- def CreateNodeCli(self,
122
- request: flwr.proto.control_pb2.CreateNodeCliRequest,
121
+ def RegisterNode(self,
122
+ request: flwr.proto.control_pb2.RegisterNodeRequest,
123
123
  context: grpc.ServicerContext,
124
- ) -> flwr.proto.control_pb2.CreateNodeCliResponse:
125
- """Add SuperNode"""
124
+ ) -> flwr.proto.control_pb2.RegisterNodeResponse:
125
+ """Register SuperNode"""
126
126
  pass
127
127
 
128
128
  @abc.abstractmethod
129
- def DeleteNodeCli(self,
130
- request: flwr.proto.control_pb2.DeleteNodeCliRequest,
129
+ def UnregisterNode(self,
130
+ request: flwr.proto.control_pb2.UnregisterNodeRequest,
131
131
  context: grpc.ServicerContext,
132
- ) -> flwr.proto.control_pb2.DeleteNodeCliResponse:
133
- """Remove SuperNode"""
132
+ ) -> flwr.proto.control_pb2.UnregisterNodeResponse:
133
+ """Unregister SuperNode"""
134
134
  pass
135
135
 
136
136
  @abc.abstractmethod
137
- def ListNodesCli(self,
138
- request: flwr.proto.control_pb2.ListNodesCliRequest,
137
+ def ListNodes(self,
138
+ request: flwr.proto.control_pb2.ListNodesRequest,
139
139
  context: grpc.ServicerContext,
140
- ) -> flwr.proto.control_pb2.ListNodesCliResponse:
140
+ ) -> flwr.proto.control_pb2.ListNodesResponse:
141
141
  """List SuperNodes"""
142
142
  pass
143
143