Skip to content

Commit 467f72c

Browse files
committed
typing: Add hints to volume commands
Change-Id: I0bd114c1a0310e108bd14aede98f574a1f9e64c7 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent faa4d51 commit 467f72c

29 files changed

Lines changed: 639 additions & 321 deletions

openstackclient/volume/client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
# under the License.
1414
#
1515

16+
import argparse
1617
import logging
18+
from typing import Any
1719

1820
from osc_lib import exceptions
1921
from osc_lib import utils
@@ -34,7 +36,7 @@
3436
_volume_api_version = None
3537

3638

37-
def make_client(instance):
39+
def make_client(instance: Any) -> Any:
3840
"""Returns a volume service client."""
3941

4042
# Defer client imports until we actually need them
@@ -92,7 +94,9 @@ def make_client(instance):
9294
return client
9395

9496

95-
def build_option_parser(parser):
97+
def build_option_parser(
98+
parser: argparse.ArgumentParser,
99+
) -> argparse.ArgumentParser:
96100
"""Hook to add global options"""
97101
parser.add_argument(
98102
'--os-volume-api-version',
@@ -104,7 +108,7 @@ def build_option_parser(parser):
104108
return parser
105109

106110

107-
def check_api_version(check_version):
111+
def check_api_version(check_version: str) -> bool:
108112
"""Validate version supplied by user
109113
110114
Returns:

openstackclient/volume/v2/backup_record.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414

1515
"""Volume v2 Backup action implementations"""
1616

17+
import argparse
1718
import logging
19+
from collections.abc import Iterable, Sequence
20+
from typing import Any
1821

1922
from osc_lib import utils
2023

@@ -33,7 +36,7 @@ class ExportBackupRecord(command.ShowOne):
3336
restore."""
3437
)
3538

36-
def get_parser(self, prog_name):
39+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
3740
parser = super().get_parser(prog_name)
3841
parser.add_argument(
3942
"backup",
@@ -42,7 +45,9 @@ def get_parser(self, prog_name):
4245
)
4346
return parser
4447

45-
def take_action(self, parsed_args):
48+
def take_action(
49+
self, parsed_args: argparse.Namespace
50+
) -> tuple[Sequence[str], Iterable[Any]]:
4651
volume_client = self.app.client_manager.volume
4752
backup = utils.find_resource(volume_client.backups, parsed_args.backup)
4853
backup_data = volume_client.backups.export_record(backup.id)
@@ -53,7 +58,8 @@ def take_action(self, parsed_args):
5358
backup_data['Backup Service'] = backup_data.pop('backup_service')
5459
backup_data['Metadata'] = backup_data.pop('backup_url')
5560

56-
return zip(*sorted(backup_data.items()))
61+
col_headers, col_data = zip(*sorted(backup_data.items()))
62+
return col_headers, col_data
5763

5864

5965
class ImportBackupRecord(command.ShowOne):
@@ -64,7 +70,7 @@ class ImportBackupRecord(command.ShowOne):
6470
rebuilt service instance"""
6571
)
6672

67-
def get_parser(self, prog_name):
73+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
6874
parser = super().get_parser(prog_name)
6975
parser.add_argument(
7076
"backup_service",
@@ -78,10 +84,13 @@ def get_parser(self, prog_name):
7884
)
7985
return parser
8086

81-
def take_action(self, parsed_args):
87+
def take_action(
88+
self, parsed_args: argparse.Namespace
89+
) -> tuple[Sequence[str], Iterable[Any]]:
8290
volume_client = self.app.client_manager.volume
8391
backup_data = volume_client.backups.import_record(
8492
parsed_args.backup_service, parsed_args.backup_metadata
8593
)
8694
backup_data.pop('links', None)
87-
return zip(*sorted(backup_data.items()))
95+
col_headers, col_data = zip(*sorted(backup_data.items()))
96+
return col_headers, col_data

openstackclient/volume/v2/consistency_group.py

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

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

2022
from osc_lib.cli import format_columns
2123
from osc_lib import exceptions
@@ -28,7 +30,9 @@
2830
LOG = logging.getLogger(__name__)
2931

3032

31-
def _find_volumes(parsed_args_volumes, volume_client):
33+
def _find_volumes(
34+
parsed_args_volumes: list[str], volume_client: Any
35+
) -> tuple[int, str]:
3236
result = 0
3337
uuid = ''
3438
for volume in parsed_args_volumes:
@@ -48,7 +52,7 @@ def _find_volumes(parsed_args_volumes, volume_client):
4852
class AddVolumeToConsistencyGroup(command.Command):
4953
_description = _("Add volume(s) to consistency group")
5054

51-
def get_parser(self, prog_name):
55+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
5256
parser = super().get_parser(prog_name)
5357
parser.add_argument(
5458
'consistency_group',
@@ -66,7 +70,7 @@ def get_parser(self, prog_name):
6670
)
6771
return parser
6872

69-
def take_action(self, parsed_args):
73+
def take_action(self, parsed_args: argparse.Namespace) -> None:
7074
volume_client = self.app.client_manager.volume
7175
result, add_uuid = _find_volumes(parsed_args.volumes, volume_client)
7276

@@ -90,7 +94,7 @@ def take_action(self, parsed_args):
9094
class CreateConsistencyGroup(command.ShowOne):
9195
_description = _("Create new consistency group.")
9296

93-
def get_parser(self, prog_name):
97+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
9498
parser = super().get_parser(prog_name)
9599
parser.add_argument(
96100
"name",
@@ -144,7 +148,9 @@ def get_parser(self, prog_name):
144148
)
145149
return parser
146150

147-
def take_action(self, parsed_args):
151+
def take_action(
152+
self, parsed_args: argparse.Namespace
153+
) -> tuple[Sequence[str], Iterable[Any]]:
148154
volume_client = self.app.client_manager.volume
149155
if parsed_args.volume_type:
150156
volume_type_id = utils.find_resource(
@@ -186,13 +192,14 @@ def take_action(self, parsed_args):
186192
)
187193
)
188194

189-
return zip(*sorted(consistency_group._info.items()))
195+
col_headers, col_data = zip(*sorted(consistency_group._info.items()))
196+
return col_headers, col_data
190197

191198

192199
class DeleteConsistencyGroup(command.Command):
193200
_description = _("Delete consistency group(s).")
194201

195-
def get_parser(self, prog_name):
202+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
196203
parser = super().get_parser(prog_name)
197204
parser.add_argument(
198205
'consistency_groups',
@@ -208,7 +215,7 @@ def get_parser(self, prog_name):
208215
)
209216
return parser
210217

211-
def take_action(self, parsed_args):
218+
def take_action(self, parsed_args: argparse.Namespace) -> None:
212219
volume_client = self.app.client_manager.volume
213220
result = 0
214221

@@ -241,7 +248,7 @@ def take_action(self, parsed_args):
241248
class ListConsistencyGroup(command.Lister):
242249
_description = _("List consistency groups.")
243250

244-
def get_parser(self, prog_name):
251+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
245252
parser = super().get_parser(prog_name)
246253
parser.add_argument(
247254
'--all-projects',
@@ -258,7 +265,9 @@ def get_parser(self, prog_name):
258265
)
259266
return parser
260267

261-
def take_action(self, parsed_args):
268+
def take_action(
269+
self, parsed_args: argparse.Namespace
270+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
262271
if parsed_args.long:
263272
columns = [
264273
'ID',
@@ -292,7 +301,7 @@ def take_action(self, parsed_args):
292301
class RemoveVolumeFromConsistencyGroup(command.Command):
293302
_description = _("Remove volume(s) from consistency group")
294303

295-
def get_parser(self, prog_name):
304+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
296305
parser = super().get_parser(prog_name)
297306
parser.add_argument(
298307
'consistency_group',
@@ -310,7 +319,7 @@ def get_parser(self, prog_name):
310319
)
311320
return parser
312321

313-
def take_action(self, parsed_args):
322+
def take_action(self, parsed_args: argparse.Namespace) -> None:
314323
volume_client = self.app.client_manager.volume
315324
result, remove_uuid = _find_volumes(parsed_args.volumes, volume_client)
316325

@@ -334,7 +343,7 @@ def take_action(self, parsed_args):
334343
class SetConsistencyGroup(command.Command):
335344
_description = _("Set consistency group properties")
336345

337-
def get_parser(self, prog_name):
346+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
338347
parser = super().get_parser(prog_name)
339348
parser.add_argument(
340349
'consistency_group',
@@ -353,7 +362,7 @@ def get_parser(self, prog_name):
353362
)
354363
return parser
355364

356-
def take_action(self, parsed_args):
365+
def take_action(self, parsed_args: argparse.Namespace) -> None:
357366
volume_client = self.app.client_manager.volume
358367
kwargs = {}
359368
if parsed_args.name:
@@ -372,7 +381,7 @@ def take_action(self, parsed_args):
372381
class ShowConsistencyGroup(command.ShowOne):
373382
_description = _("Display consistency group details.")
374383

375-
def get_parser(self, prog_name):
384+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
376385
parser = super().get_parser(prog_name)
377386
parser.add_argument(
378387
"consistency_group",
@@ -381,9 +390,12 @@ def get_parser(self, prog_name):
381390
)
382391
return parser
383392

384-
def take_action(self, parsed_args):
393+
def take_action(
394+
self, parsed_args: argparse.Namespace
395+
) -> tuple[Sequence[str], Iterable[Any]]:
385396
volume_client = self.app.client_manager.volume
386397
consistency_group = utils.find_resource(
387398
volume_client.consistencygroups, parsed_args.consistency_group
388399
)
389-
return zip(*sorted(consistency_group._info.items()))
400+
col_headers, col_data = zip(*sorted(consistency_group._info.items()))
401+
return col_headers, col_data

openstackclient/volume/v2/consistency_group_snapshot.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414

1515
"""Volume v2 consistency group snapshot action implementations"""
1616

17+
import argparse
1718
import logging
19+
from collections.abc import Iterable, Sequence
20+
from typing import Any
1821

1922
from osc_lib import exceptions
2023
from osc_lib import utils
@@ -29,7 +32,7 @@
2932
class CreateConsistencyGroupSnapshot(command.ShowOne):
3033
_description = _("Create new consistency group snapshot.")
3134

32-
def get_parser(self, prog_name):
35+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
3336
parser = super().get_parser(prog_name)
3437
parser.add_argument(
3538
"snapshot_name",
@@ -52,7 +55,9 @@ def get_parser(self, prog_name):
5255
)
5356
return parser
5457

55-
def take_action(self, parsed_args):
58+
def take_action(
59+
self, parsed_args: argparse.Namespace
60+
) -> tuple[Sequence[str], Iterable[Any]]:
5661
volume_client = self.app.client_manager.volume
5762
consistency_group = parsed_args.consistency_group
5863
if not parsed_args.consistency_group:
@@ -68,13 +73,16 @@ def take_action(self, parsed_args):
6873
description=parsed_args.description,
6974
)
7075

71-
return zip(*sorted(consistency_group_snapshot._info.items()))
76+
col_headers, col_data = zip(
77+
*sorted(consistency_group_snapshot._info.items())
78+
)
79+
return col_headers, col_data
7280

7381

7482
class DeleteConsistencyGroupSnapshot(command.Command):
7583
_description = _("Delete consistency group snapshot(s).")
7684

77-
def get_parser(self, prog_name):
85+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
7886
parser = super().get_parser(prog_name)
7987
parser.add_argument(
8088
"consistency_group_snapshot",
@@ -84,7 +92,7 @@ def get_parser(self, prog_name):
8492
)
8593
return parser
8694

87-
def take_action(self, parsed_args):
95+
def take_action(self, parsed_args: argparse.Namespace) -> None:
8896
volume_client = self.app.client_manager.volume
8997
result = 0
9098

@@ -117,7 +125,7 @@ def take_action(self, parsed_args):
117125
class ListConsistencyGroupSnapshot(command.Lister):
118126
_description = _("List consistency group snapshots.")
119127

120-
def get_parser(self, prog_name):
128+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
121129
parser = super().get_parser(prog_name)
122130
parser.add_argument(
123131
'--all-projects',
@@ -153,7 +161,9 @@ def get_parser(self, prog_name):
153161
)
154162
return parser
155163

156-
def take_action(self, parsed_args):
164+
def take_action(
165+
self, parsed_args: argparse.Namespace
166+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
157167
if parsed_args.long:
158168
columns = [
159169
'ID',
@@ -194,7 +204,7 @@ def take_action(self, parsed_args):
194204
class ShowConsistencyGroupSnapshot(command.ShowOne):
195205
_description = _("Display consistency group snapshot details")
196206

197-
def get_parser(self, prog_name):
207+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
198208
parser = super().get_parser(prog_name)
199209
parser.add_argument(
200210
"consistency_group_snapshot",
@@ -203,9 +213,14 @@ def get_parser(self, prog_name):
203213
)
204214
return parser
205215

206-
def take_action(self, parsed_args):
216+
def take_action(
217+
self, parsed_args: argparse.Namespace
218+
) -> tuple[Sequence[str], Iterable[Any]]:
207219
volume_client = self.app.client_manager.volume
208220
consistency_group_snapshot = utils.find_resource(
209221
volume_client.cgsnapshots, parsed_args.consistency_group_snapshot
210222
)
211-
return zip(*sorted(consistency_group_snapshot._info.items()))
223+
col_headers, col_data = zip(
224+
*sorted(consistency_group_snapshot._info.items())
225+
)
226+
return col_headers, col_data

0 commit comments

Comments
 (0)