Skip to content

Commit cabbe59

Browse files
committed
typing: Add hints to object commands
Change-Id: I7858ab6e8d8a437d67e88eeadc19e3dcc74d3d51 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 8a6c3af commit cabbe59

4 files changed

Lines changed: 70 additions & 38 deletions

File tree

openstackclient/object/client.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
"""Object client"""
1717

18+
import argparse
19+
from typing import Any
20+
1821
from osc_lib import utils
1922

2023
from openstackclient.api import object_store_v1
@@ -26,7 +29,7 @@
2629
API_VERSIONS = ('1',)
2730

2831

29-
def make_client(instance):
32+
def make_client(instance: Any) -> object_store_v1.APIv1:
3033
"""Returns an object-store API client."""
3134

3235
endpoint = instance.get_endpoint_for_service_type(
@@ -43,7 +46,9 @@ def make_client(instance):
4346
return client
4447

4548

46-
def build_option_parser(parser):
49+
def build_option_parser(
50+
parser: argparse.ArgumentParser,
51+
) -> argparse.ArgumentParser:
4752
"""Hook to add global options"""
4853
parser.add_argument(
4954
'--os-object-api-version',

openstackclient/object/v1/account.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313

1414
"""Account v1 action implementations"""
1515

16+
import argparse
17+
from collections.abc import Iterable, Sequence
18+
from typing import Any
19+
1620
from osc_lib.cli import format_columns
1721
from osc_lib.cli import parseractions
1822

@@ -23,7 +27,7 @@
2327
class SetAccount(command.Command):
2428
_description = _("Set account properties")
2529

26-
def get_parser(self, prog_name):
30+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
2731
parser = super().get_parser(prog_name)
2832
parser.add_argument(
2933
"--property",
@@ -37,7 +41,7 @@ def get_parser(self, prog_name):
3741
)
3842
return parser
3943

40-
def take_action(self, parsed_args):
44+
def take_action(self, parsed_args: argparse.Namespace) -> None:
4145
self.app.client_manager.object_store.account_set(
4246
properties=parsed_args.property,
4347
)
@@ -46,19 +50,22 @@ def take_action(self, parsed_args):
4650
class ShowAccount(command.ShowOne):
4751
_description = _("Display account details")
4852

49-
def take_action(self, parsed_args):
53+
def take_action(
54+
self, parsed_args: argparse.Namespace
55+
) -> tuple[Sequence[str], Iterable[Any]]:
5056
data = self.app.client_manager.object_store.account_show()
5157
if 'properties' in data:
5258
data['properties'] = format_columns.DictColumn(
5359
data.pop('properties')
5460
)
55-
return zip(*sorted(data.items()))
61+
col_headers, col_data = zip(*sorted(data.items()))
62+
return col_headers, col_data
5663

5764

5865
class UnsetAccount(command.Command):
5966
_description = _("Unset account properties")
6067

61-
def get_parser(self, prog_name):
68+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
6269
parser = super().get_parser(prog_name)
6370
parser.add_argument(
6471
'--property',
@@ -73,7 +80,7 @@ def get_parser(self, prog_name):
7380
)
7481
return parser
7582

76-
def take_action(self, parsed_args):
83+
def take_action(self, parsed_args: argparse.Namespace) -> None:
7784
self.app.client_manager.object_store.account_unset(
7885
properties=parsed_args.property,
7986
)

openstackclient/object/v1/container.py

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

1616
"""Container v1 action implementations"""
1717

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

2023
from osc_lib.cli import format_columns
2124
from osc_lib.cli import parseractions
@@ -31,7 +34,7 @@
3134
class CreateContainer(command.Lister):
3235
_description = _("Create new container")
3336

34-
def get_parser(self, prog_name):
37+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
3538
parser = super().get_parser(prog_name)
3639
parser.add_argument(
3740
'--public',
@@ -51,7 +54,9 @@ def get_parser(self, prog_name):
5154
)
5255
return parser
5356

54-
def take_action(self, parsed_args):
57+
def take_action(
58+
self, parsed_args: argparse.Namespace
59+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
5560
results = []
5661
for container in parsed_args.containers:
5762
if len(container) > 256:
@@ -84,7 +89,7 @@ def take_action(self, parsed_args):
8489
class DeleteContainer(command.Command):
8590
_description = _("Delete container")
8691

87-
def get_parser(self, prog_name):
92+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
8893
parser = super().get_parser(prog_name)
8994
parser.add_argument(
9095
'--recursive',
@@ -101,7 +106,7 @@ def get_parser(self, prog_name):
101106
)
102107
return parser
103108

104-
def take_action(self, parsed_args):
109+
def take_action(self, parsed_args: argparse.Namespace) -> None:
105110
for container in parsed_args.containers:
106111
if parsed_args.recursive:
107112
objs = self.app.client_manager.object_store.object_list(
@@ -120,7 +125,7 @@ def take_action(self, parsed_args):
120125
class ListContainer(command.Lister):
121126
_description = _("List containers")
122127

123-
def get_parser(self, prog_name):
128+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
124129
parser = super().get_parser(prog_name)
125130
parser.add_argument(
126131
"--prefix",
@@ -147,7 +152,9 @@ def get_parser(self, prog_name):
147152
)
148153
return parser
149154

150-
def take_action(self, parsed_args):
155+
def take_action(
156+
self, parsed_args: argparse.Namespace
157+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
151158
columns: tuple[str, ...] = ('Name',)
152159
if parsed_args.long:
153160
columns += ('Bytes', 'Count')
@@ -182,7 +189,7 @@ def take_action(self, parsed_args):
182189
class SaveContainer(command.Command):
183190
_description = _("Save container contents locally")
184191

185-
def get_parser(self, prog_name):
192+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
186193
parser = super().get_parser(prog_name)
187194
parser.add_argument(
188195
'container',
@@ -191,7 +198,7 @@ def get_parser(self, prog_name):
191198
)
192199
return parser
193200

194-
def take_action(self, parsed_args):
201+
def take_action(self, parsed_args: argparse.Namespace) -> None:
195202
self.app.client_manager.object_store.container_save(
196203
container=parsed_args.container,
197204
)
@@ -200,7 +207,7 @@ def take_action(self, parsed_args):
200207
class SetContainer(command.Command):
201208
_description = _("Set container properties")
202209

203-
def get_parser(self, prog_name):
210+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
204211
parser = super().get_parser(prog_name)
205212
parser.add_argument(
206213
'container',
@@ -219,7 +226,7 @@ def get_parser(self, prog_name):
219226
)
220227
return parser
221228

222-
def take_action(self, parsed_args):
229+
def take_action(self, parsed_args: argparse.Namespace) -> None:
223230
self.app.client_manager.object_store.container_set(
224231
parsed_args.container,
225232
properties=parsed_args.property,
@@ -229,7 +236,7 @@ def take_action(self, parsed_args):
229236
class ShowContainer(command.ShowOne):
230237
_description = _("Display container details")
231238

232-
def get_parser(self, prog_name):
239+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
233240
parser = super().get_parser(prog_name)
234241
parser.add_argument(
235242
'container',
@@ -238,20 +245,23 @@ def get_parser(self, prog_name):
238245
)
239246
return parser
240247

241-
def take_action(self, parsed_args):
248+
def take_action(
249+
self, parsed_args: argparse.Namespace
250+
) -> tuple[Sequence[str], Iterable[Any]]:
242251
data = self.app.client_manager.object_store.container_show(
243252
container=parsed_args.container,
244253
)
245254
if 'properties' in data:
246255
data['properties'] = format_columns.DictColumn(data['properties'])
247256

248-
return zip(*sorted(data.items()))
257+
col_headers, col_data = zip(*sorted(data.items()))
258+
return col_headers, col_data
249259

250260

251261
class UnsetContainer(command.Command):
252262
_description = _("Unset container properties")
253263

254-
def get_parser(self, prog_name):
264+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
255265
parser = super().get_parser(prog_name)
256266
parser.add_argument(
257267
'container',
@@ -271,7 +281,7 @@ def get_parser(self, prog_name):
271281
)
272282
return parser
273283

274-
def take_action(self, parsed_args):
284+
def take_action(self, parsed_args: argparse.Namespace) -> None:
275285
self.app.client_manager.object_store.container_unset(
276286
parsed_args.container,
277287
properties=parsed_args.property,

openstackclient/object/v1/object.py

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

1616
"""Object v1 action implementations"""
1717

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

2023
from osc_lib.cli import format_columns
2124
from osc_lib.cli import parseractions
@@ -33,7 +36,7 @@
3336
class CreateObject(command.Lister):
3437
_description = _("Upload object to container")
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
'container',
@@ -56,7 +59,9 @@ def get_parser(self, prog_name):
5659
)
5760
return parser
5861

59-
def take_action(self, parsed_args):
62+
def take_action(
63+
self, parsed_args: argparse.Namespace
64+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
6065
if parsed_args.name:
6166
if len(parsed_args.objects) > 1:
6267
msg = _(
@@ -98,7 +103,7 @@ def take_action(self, parsed_args):
98103
class DeleteObject(command.Command):
99104
_description = _("Delete object from container")
100105

101-
def get_parser(self, prog_name):
106+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
102107
parser = super().get_parser(prog_name)
103108
parser.add_argument(
104109
'container',
@@ -113,7 +118,7 @@ def get_parser(self, prog_name):
113118
)
114119
return parser
115120

116-
def take_action(self, parsed_args):
121+
def take_action(self, parsed_args: argparse.Namespace) -> None:
117122
for obj in parsed_args.objects:
118123
self.app.client_manager.object_store.object_delete(
119124
container=parsed_args.container,
@@ -124,7 +129,7 @@ def take_action(self, parsed_args):
124129
class ListObject(command.Lister):
125130
_description = _("List objects")
126131

127-
def get_parser(self, prog_name):
132+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
128133
parser = super().get_parser(prog_name)
129134
parser.add_argument(
130135
"container",
@@ -161,7 +166,9 @@ def get_parser(self, prog_name):
161166
)
162167
return parser
163168

164-
def take_action(self, parsed_args):
169+
def take_action(
170+
self, parsed_args: argparse.Namespace
171+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
165172
columns: tuple[str, ...] = ('Name',)
166173
if parsed_args.long:
167174
columns += ('Bytes', 'Hash', 'Content Type', 'Last Modified')
@@ -200,7 +207,7 @@ def take_action(self, parsed_args):
200207
class SaveObject(command.Command):
201208
_description = _("Save object locally")
202209

203-
def get_parser(self, prog_name):
210+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
204211
parser = super().get_parser(prog_name)
205212
parser.add_argument(
206213
"--file",
@@ -222,7 +229,7 @@ def get_parser(self, prog_name):
222229
)
223230
return parser
224231

225-
def take_action(self, parsed_args):
232+
def take_action(self, parsed_args: argparse.Namespace) -> None:
226233
self.app.client_manager.object_store.object_save(
227234
container=parsed_args.container,
228235
object=parsed_args.object,
@@ -233,7 +240,7 @@ def take_action(self, parsed_args):
233240
class SetObject(command.Command):
234241
_description = _("Set object properties")
235242

236-
def get_parser(self, prog_name):
243+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
237244
parser = super().get_parser(prog_name)
238245
parser.add_argument(
239246
'container',
@@ -257,7 +264,7 @@ def get_parser(self, prog_name):
257264
)
258265
return parser
259266

260-
def take_action(self, parsed_args):
267+
def take_action(self, parsed_args: argparse.Namespace) -> None:
261268
self.app.client_manager.object_store.object_set(
262269
parsed_args.container,
263270
parsed_args.object,
@@ -268,7 +275,7 @@ def take_action(self, parsed_args):
268275
class ShowObject(command.ShowOne):
269276
_description = _("Display object details")
270277

271-
def get_parser(self, prog_name):
278+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
272279
parser = super().get_parser(prog_name)
273280
parser.add_argument(
274281
'container',
@@ -282,21 +289,24 @@ def get_parser(self, prog_name):
282289
)
283290
return parser
284291

285-
def take_action(self, parsed_args):
292+
def take_action(
293+
self, parsed_args: argparse.Namespace
294+
) -> tuple[Sequence[str], Iterable[Any]]:
286295
data = self.app.client_manager.object_store.object_show(
287296
container=parsed_args.container,
288297
object=parsed_args.object,
289298
)
290299
if 'properties' in data:
291300
data['properties'] = format_columns.DictColumn(data['properties'])
292301

293-
return zip(*sorted(data.items()))
302+
col_headers, col_data = zip(*sorted(data.items()))
303+
return col_headers, col_data
294304

295305

296306
class UnsetObject(command.Command):
297307
_description = _("Unset object properties")
298308

299-
def get_parser(self, prog_name):
309+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
300310
parser = super().get_parser(prog_name)
301311
parser.add_argument(
302312
'container',
@@ -321,7 +331,7 @@ def get_parser(self, prog_name):
321331
)
322332
return parser
323333

324-
def take_action(self, parsed_args):
334+
def take_action(self, parsed_args: argparse.Namespace) -> None:
325335
self.app.client_manager.object_store.object_unset(
326336
parsed_args.container,
327337
parsed_args.object,

0 commit comments

Comments
 (0)