Skip to content

Commit f616971

Browse files
committed
typing: Add hints to compute commands
Change-Id: Ic03c9342a2ad297024c136670281a3a269521261 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 1df8c54 commit f616971

21 files changed

Lines changed: 554 additions & 302 deletions

openstackclient/compute/client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414

15+
import argparse
1516
import logging
17+
from typing import Any
1618

1719
from osc_lib import utils
1820

@@ -27,7 +29,7 @@
2729
API_VERSIONS = ('2', '2.1')
2830

2931

30-
def make_client(instance):
32+
def make_client(instance: Any) -> Any:
3133
"""Returns a compute service client."""
3234
LOG.debug(
3335
'Compute client initialized using OpenStack SDK: %s',
@@ -36,7 +38,9 @@ def make_client(instance):
3638
return instance.sdk_connection.compute
3739

3840

39-
def build_option_parser(parser):
41+
def build_option_parser(
42+
parser: argparse.ArgumentParser,
43+
) -> argparse.ArgumentParser:
4044
"""Hook to add global options"""
4145
parser.add_argument(
4246
'--os-compute-api-version',
@@ -48,6 +52,6 @@ def build_option_parser(parser):
4852
return parser
4953

5054

51-
def check_api_version(check_version):
55+
def check_api_version(check_version: str) -> bool:
5256
# SDK supports auto-negotiation for us: always return True
5357
return True

openstackclient/compute/v2/agent.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
14-
#
1514

1615
"""Agent action implementations"""
1716

17+
import argparse
18+
from collections.abc import Iterable, Sequence
1819
import logging
20+
from typing import Any
1921

2022
from openstack import exceptions as sdk_exceptions
2123
from osc_lib import exceptions
@@ -36,7 +38,7 @@ class CreateAgent(command.ShowOne):
3638
23.0.0 (Wallaby) release.
3739
"""
3840

39-
def get_parser(self, prog_name):
41+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
4042
parser = super().get_parser(prog_name)
4143
parser.add_argument("os", metavar="<os>", help=_("Type of OS"))
4244
parser.add_argument(
@@ -55,7 +57,9 @@ def get_parser(self, prog_name):
5557
)
5658
return parser
5759

58-
def take_action(self, parsed_args):
60+
def take_action(
61+
self, parsed_args: argparse.Namespace
62+
) -> tuple[Sequence[str], Iterable[Any]]:
5963
compute_client = self.app.client_manager.compute
6064

6165
# doing this since openstacksdk has decided not to support this
@@ -76,7 +80,8 @@ def take_action(self, parsed_args):
7680
sdk_exceptions.raise_from_response(response)
7781
agent = response.json().get('agent')
7882

79-
return zip(*sorted(agent.items()))
83+
col_headers, col_data = zip(*sorted(agent.items()))
84+
return col_headers, col_data
8085

8186

8287
class DeleteAgent(command.Command):
@@ -87,14 +92,14 @@ class DeleteAgent(command.Command):
8792
23.0.0 (Wallaby) release.
8893
"""
8994

90-
def get_parser(self, prog_name):
95+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
9196
parser = super().get_parser(prog_name)
9297
parser.add_argument(
9398
"id", metavar="<id>", nargs='+', help=_("ID of agent(s) to delete")
9499
)
95100
return parser
96101

97-
def take_action(self, parsed_args):
102+
def take_action(self, parsed_args: argparse.Namespace) -> None:
98103
compute_client = self.app.client_manager.compute
99104
result = 0
100105
for id in parsed_args.id:
@@ -129,7 +134,7 @@ class ListAgent(command.Lister):
129134
23.0.0 (Wallaby) release.
130135
"""
131136

132-
def get_parser(self, prog_name):
137+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
133138
parser = super().get_parser(prog_name)
134139
parser.add_argument(
135140
"--hypervisor",
@@ -138,7 +143,9 @@ def get_parser(self, prog_name):
138143
)
139144
return parser
140145

141-
def take_action(self, parsed_args):
146+
def take_action(
147+
self, parsed_args: argparse.Namespace
148+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
142149
compute_client = self.app.client_manager.compute
143150
columns = (
144151
"Agent ID",
@@ -171,7 +178,7 @@ class SetAgent(command.Command):
171178
23.0.0 (Wallaby) release.
172179
"""
173180

174-
def get_parser(self, prog_name):
181+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
175182
parser = super().get_parser(prog_name)
176183
parser.add_argument(
177184
"id",
@@ -193,7 +200,7 @@ def get_parser(self, prog_name):
193200
)
194201
return parser
195202

196-
def take_action(self, parsed_args):
203+
def take_action(self, parsed_args: argparse.Namespace) -> None:
197204
compute_client = self.app.client_manager.compute
198205

199206
response = compute_client.get('/os-agents', microversion='2.1')

openstackclient/compute/v2/aggregate.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
"""Compute v2 Aggregate action implementations"""
1818

19+
import argparse
20+
from collections.abc import Iterable, Sequence
1921
import logging
2022
from typing import Any
2123

@@ -41,7 +43,9 @@
4143
}
4244

4345

44-
def _get_aggregate_columns(item):
46+
def _get_aggregate_columns(
47+
item: Any,
48+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
4549
# To maintain backwards compatibility we need to rename sdk props to
4650
# whatever OSC was using before
4751
column_map = {
@@ -56,7 +60,7 @@ def _get_aggregate_columns(item):
5660
class AddAggregateHost(command.ShowOne):
5761
_description = _("Add host to aggregate")
5862

59-
def get_parser(self, prog_name):
63+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
6064
parser = super().get_parser(prog_name)
6165
parser.add_argument(
6266
'aggregate',
@@ -68,7 +72,9 @@ def get_parser(self, prog_name):
6872
)
6973
return parser
7074

71-
def take_action(self, parsed_args):
75+
def take_action(
76+
self, parsed_args: argparse.Namespace
77+
) -> tuple[Sequence[str], Iterable[Any]]:
7278
compute_client = self.app.client_manager.compute
7379

7480
aggregate = compute_client.find_aggregate(
@@ -89,7 +95,7 @@ def take_action(self, parsed_args):
8995
class CreateAggregate(command.ShowOne):
9096
_description = _("Create a new aggregate")
9197

92-
def get_parser(self, prog_name):
98+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
9399
parser = super().get_parser(prog_name)
94100
parser.add_argument(
95101
"name", metavar="<name>", help=_("New aggregate name")
@@ -111,7 +117,9 @@ def get_parser(self, prog_name):
111117
)
112118
return parser
113119

114-
def take_action(self, parsed_args):
120+
def take_action(
121+
self, parsed_args: argparse.Namespace
122+
) -> tuple[Sequence[str], Iterable[Any]]:
115123
compute_client = self.app.client_manager.compute
116124

117125
attrs = {'name': parsed_args.name}
@@ -137,7 +145,7 @@ def take_action(self, parsed_args):
137145
class DeleteAggregate(command.Command):
138146
_description = _("Delete existing aggregate(s)")
139147

140-
def get_parser(self, prog_name):
148+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
141149
parser = super().get_parser(prog_name)
142150
parser.add_argument(
143151
'aggregate',
@@ -147,7 +155,7 @@ def get_parser(self, prog_name):
147155
)
148156
return parser
149157

150-
def take_action(self, parsed_args):
158+
def take_action(self, parsed_args: argparse.Namespace) -> None:
151159
compute_client = self.app.client_manager.compute
152160
result = 0
153161
for a in parsed_args.aggregate:
@@ -180,7 +188,7 @@ def take_action(self, parsed_args):
180188
class ListAggregate(command.Lister):
181189
_description = _("List all aggregates")
182190

183-
def get_parser(self, prog_name):
191+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
184192
parser = super().get_parser(prog_name)
185193
parser.add_argument(
186194
'--long',
@@ -190,7 +198,9 @@ def get_parser(self, prog_name):
190198
)
191199
return parser
192200

193-
def take_action(self, parsed_args):
201+
def take_action(
202+
self, parsed_args: argparse.Namespace
203+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
194204
compute_client = self.app.client_manager.compute
195205

196206
aggregates = list(compute_client.aggregates())
@@ -240,7 +250,7 @@ def take_action(self, parsed_args):
240250
class RemoveAggregateHost(command.ShowOne):
241251
_description = _("Remove host from aggregate")
242252

243-
def get_parser(self, prog_name):
253+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
244254
parser = super().get_parser(prog_name)
245255
parser.add_argument(
246256
'aggregate',
@@ -252,7 +262,9 @@ def get_parser(self, prog_name):
252262
)
253263
return parser
254264

255-
def take_action(self, parsed_args):
265+
def take_action(
266+
self, parsed_args: argparse.Namespace
267+
) -> tuple[Sequence[str], Iterable[Any]]:
256268
compute_client = self.app.client_manager.compute
257269

258270
aggregate = compute_client.find_aggregate(
@@ -273,7 +285,7 @@ def take_action(self, parsed_args):
273285
class SetAggregate(command.Command):
274286
_description = _("Set aggregate properties")
275287

276-
def get_parser(self, prog_name):
288+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
277289
parser = super().get_parser(prog_name)
278290
parser.add_argument(
279291
'aggregate',
@@ -309,7 +321,7 @@ def get_parser(self, prog_name):
309321
)
310322
return parser
311323

312-
def take_action(self, parsed_args):
324+
def take_action(self, parsed_args: argparse.Namespace) -> None:
313325
compute_client = self.app.client_manager.compute
314326
aggregate = compute_client.find_aggregate(
315327
parsed_args.aggregate, ignore_missing=False
@@ -345,7 +357,7 @@ def take_action(self, parsed_args):
345357
class ShowAggregate(command.ShowOne):
346358
_description = _("Display aggregate details")
347359

348-
def get_parser(self, prog_name):
360+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
349361
parser = super().get_parser(prog_name)
350362
parser.add_argument(
351363
'aggregate',
@@ -354,7 +366,9 @@ def get_parser(self, prog_name):
354366
)
355367
return parser
356368

357-
def take_action(self, parsed_args):
369+
def take_action(
370+
self, parsed_args: argparse.Namespace
371+
) -> tuple[Sequence[str], Iterable[Any]]:
358372
compute_client = self.app.client_manager.compute
359373
aggregate = compute_client.find_aggregate(
360374
parsed_args.aggregate, ignore_missing=False
@@ -374,7 +388,7 @@ def take_action(self, parsed_args):
374388
class UnsetAggregate(command.Command):
375389
_description = _("Unset aggregate properties")
376390

377-
def get_parser(self, prog_name):
391+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
378392
parser = super().get_parser(prog_name)
379393
parser.add_argument(
380394
"aggregate",
@@ -394,7 +408,7 @@ def get_parser(self, prog_name):
394408
)
395409
return parser
396410

397-
def take_action(self, parsed_args):
411+
def take_action(self, parsed_args: argparse.Namespace) -> None:
398412
compute_client = self.app.client_manager.compute
399413
aggregate = compute_client.find_aggregate(
400414
parsed_args.aggregate, ignore_missing=False
@@ -411,7 +425,7 @@ class CacheImageForAggregate(command.Command):
411425
# NOTE(gtema): According to stephenfin and dansmith there is no and will
412426
# not be anything to return.
413427

414-
def get_parser(self, prog_name):
428+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
415429
parser = super().get_parser(prog_name)
416430
parser.add_argument(
417431
'aggregate',
@@ -429,7 +443,7 @@ def get_parser(self, prog_name):
429443
)
430444
return parser
431445

432-
def take_action(self, parsed_args):
446+
def take_action(self, parsed_args: argparse.Namespace) -> None:
433447
compute_client = self.app.client_manager.compute
434448

435449
if not sdk_utils.supports_microversion(compute_client, '2.81'):

openstackclient/compute/v2/console.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515

1616
"""Compute v2 Console action implementations"""
1717

18+
import argparse
19+
from collections.abc import Iterable, Sequence
20+
from typing import Any
21+
1822
from osc_lib.cli import parseractions
1923
from osc_lib import utils
2024

2125
from openstackclient import command
2226
from openstackclient.i18n import _
2327

2428

25-
def _get_console_columns(item):
29+
def _get_console_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
2630
# To maintain backwards compatibility we need to rename sdk props to
2731
# whatever OSC was using before
2832
hidden_columns = ['id', 'links', 'location', 'name']
@@ -34,7 +38,7 @@ def _get_console_columns(item):
3438
class ShowConsoleLog(command.Command):
3539
_description = _("Show server's console output")
3640

37-
def get_parser(self, prog_name):
41+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
3842
parser = super().get_parser(prog_name)
3943
parser.add_argument(
4044
'server',
@@ -54,7 +58,7 @@ def get_parser(self, prog_name):
5458
)
5559
return parser
5660

57-
def take_action(self, parsed_args):
61+
def take_action(self, parsed_args: argparse.Namespace) -> None:
5862
compute_client = self.app.client_manager.compute
5963

6064
server = compute_client.find_server(
@@ -78,7 +82,7 @@ def take_action(self, parsed_args):
7882
class ShowConsoleURL(command.ShowOne):
7983
_description = _("Show server's remote console URL")
8084

81-
def get_parser(self, prog_name):
85+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
8286
parser = super().get_parser(prog_name)
8387
parser.add_argument(
8488
'server',
@@ -138,7 +142,9 @@ def get_parser(self, prog_name):
138142
)
139143
return parser
140144

141-
def take_action(self, parsed_args):
145+
def take_action(
146+
self, parsed_args: argparse.Namespace
147+
) -> tuple[Sequence[str], Iterable[Any]]:
142148
compute_client = self.app.client_manager.compute
143149
server = compute_client.find_server(
144150
parsed_args.server, ignore_missing=False

0 commit comments

Comments
 (0)