osc-lib 3.1.0__py3-none-any.whl → 4.0.0__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.
Files changed (41) hide show
  1. osc_lib/api/api.py +67 -30
  2. osc_lib/api/auth.py +39 -25
  3. osc_lib/api/utils.py +10 -5
  4. osc_lib/cli/client_config.py +55 -35
  5. osc_lib/cli/format_columns.py +19 -17
  6. osc_lib/cli/identity.py +14 -3
  7. osc_lib/cli/pagination.py +83 -0
  8. osc_lib/cli/parseractions.py +116 -37
  9. osc_lib/clientmanager.py +49 -28
  10. osc_lib/command/command.py +20 -9
  11. osc_lib/command/timing.py +11 -1
  12. osc_lib/exceptions.py +13 -3
  13. osc_lib/logs.py +19 -9
  14. osc_lib/py.typed +0 -0
  15. osc_lib/shell.py +73 -56
  16. osc_lib/tests/api/fakes.py +1 -1
  17. osc_lib/tests/api/test_api.py +5 -5
  18. osc_lib/tests/api/test_utils.py +1 -1
  19. osc_lib/tests/cli/test_client_config.py +1 -1
  20. osc_lib/tests/cli/test_format_columns.py +1 -1
  21. osc_lib/tests/cli/test_parseractions.py +48 -100
  22. osc_lib/tests/command/test_timing.py +2 -2
  23. osc_lib/tests/fakes.py +10 -10
  24. osc_lib/tests/test_clientmanager.py +1 -1
  25. osc_lib/tests/test_logs.py +2 -2
  26. osc_lib/tests/test_shell.py +10 -10
  27. osc_lib/tests/utils/__init__.py +6 -25
  28. osc_lib/tests/utils/test_tags.py +22 -7
  29. osc_lib/tests/utils/test_utils.py +4 -14
  30. osc_lib/utils/__init__.py +183 -111
  31. osc_lib/utils/columns.py +25 -11
  32. osc_lib/utils/tags.py +39 -21
  33. {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/AUTHORS +1 -0
  34. {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/METADATA +11 -13
  35. osc_lib-4.0.0.dist-info/RECORD +53 -0
  36. {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/WHEEL +1 -1
  37. osc_lib-4.0.0.dist-info/pbr.json +1 -0
  38. osc_lib-3.1.0.dist-info/RECORD +0 -51
  39. osc_lib-3.1.0.dist-info/pbr.json +0 -1
  40. {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/LICENSE +0 -0
  41. {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/top_level.txt +0 -0
@@ -21,7 +21,7 @@ from osc_lib.tests import utils
21
21
 
22
22
  class TestKeyValueAction(utils.TestCase):
23
23
  def setUp(self):
24
- super(TestKeyValueAction, self).setUp()
24
+ super().setUp()
25
25
 
26
26
  self.parser = argparse.ArgumentParser()
27
27
 
@@ -68,14 +68,12 @@ class TestKeyValueAction(utils.TestCase):
68
68
  ],
69
69
  ]
70
70
  for data in data_list:
71
- self.assertRaises(
72
- argparse.ArgumentTypeError, self.parser.parse_args, data
73
- )
71
+ self.assertRaises(SystemExit, self.parser.parse_args, data)
74
72
 
75
73
 
76
74
  class TestKeyValueAppendAction(utils.TestCase):
77
75
  def setUp(self):
78
- super(TestKeyValueAppendAction, self).setUp()
76
+ super().setUp()
79
77
 
80
78
  self.parser = argparse.ArgumentParser()
81
79
 
@@ -129,14 +127,12 @@ class TestKeyValueAppendAction(utils.TestCase):
129
127
  ],
130
128
  ]
131
129
  for data in data_list:
132
- self.assertRaises(
133
- argparse.ArgumentTypeError, self.parser.parse_args, data
134
- )
130
+ self.assertRaises(SystemExit, self.parser.parse_args, data)
135
131
 
136
132
 
137
133
  class TestMultiKeyValueAction(utils.TestCase):
138
134
  def setUp(self):
139
- super(TestMultiKeyValueAction, self).setUp()
135
+ super().setUp()
140
136
 
141
137
  self.parser = argparse.ArgumentParser()
142
138
 
@@ -213,13 +209,11 @@ class TestMultiKeyValueAction(utils.TestCase):
213
209
  ],
214
210
  ]
215
211
  for data in data_list:
216
- self.assertRaises(
217
- argparse.ArgumentTypeError, self.parser.parse_args, data
218
- )
212
+ self.assertRaises(SystemExit, self.parser.parse_args, data)
219
213
 
220
214
  def test_error_values_without_comma(self):
221
215
  self.assertRaises(
222
- argparse.ArgumentTypeError,
216
+ SystemExit,
223
217
  self.parser.parse_args,
224
218
  [
225
219
  '--test',
@@ -229,7 +223,7 @@ class TestMultiKeyValueAction(utils.TestCase):
229
223
 
230
224
  def test_missing_key(self):
231
225
  self.assertRaises(
232
- argparse.ArgumentTypeError,
226
+ SystemExit,
233
227
  self.parser.parse_args,
234
228
  [
235
229
  '--test',
@@ -239,7 +233,7 @@ class TestMultiKeyValueAction(utils.TestCase):
239
233
 
240
234
  def test_invalid_key(self):
241
235
  self.assertRaises(
242
- argparse.ArgumentTypeError,
236
+ SystemExit,
243
237
  self.parser.parse_args,
244
238
  [
245
239
  '--test',
@@ -278,7 +272,7 @@ class TestMultiKeyValueAction(utils.TestCase):
278
272
 
279
273
  class TestMultiKeyValueCommaAction(utils.TestCase):
280
274
  def setUp(self):
281
- super(TestMultiKeyValueCommaAction, self).setUp()
275
+ super().setUp()
282
276
  self.parser = argparse.ArgumentParser()
283
277
 
284
278
  # Typical usage
@@ -361,21 +355,16 @@ class TestMultiKeyValueCommaAction(utils.TestCase):
361
355
  ]
362
356
  self.assertCountEqual(expect, actual)
363
357
 
364
- try:
365
- results = self.parser.parse_args(
366
- [
367
- '--test',
368
- 'req1=aaa,bbb',
369
- '--test',
370
- 'opt2=ccc',
371
- ]
372
- )
373
- self.fail('ArgumentTypeError should be raised')
374
- except argparse.ArgumentTypeError as e:
375
- self.assertEqual(
376
- 'Missing required keys req1.\nRequired keys are: req1',
377
- str(e),
378
- )
358
+ self.assertRaises(
359
+ SystemExit,
360
+ self.parser.parse_args,
361
+ [
362
+ '--test',
363
+ 'req1=aaa,bbb',
364
+ '--test',
365
+ 'opt2=ccc',
366
+ ],
367
+ )
379
368
 
380
369
  def test_mkvca_multiples(self):
381
370
  results = self.parser.parse_args(
@@ -431,75 +420,34 @@ class TestMultiKeyValueCommaAction(utils.TestCase):
431
420
  self.assertCountEqual(expect, actual)
432
421
 
433
422
  def test_mkvca_invalid_key(self):
434
- try:
435
- self.parser.parse_args(
436
- [
437
- '--test',
438
- 'req1=aaa,bbb=',
439
- ]
440
- )
441
- self.fail('ArgumentTypeError should be raised')
442
- except argparse.ArgumentTypeError as e:
443
- self.assertIn(
444
- 'Invalid keys bbb specified.\nValid keys are:',
445
- str(e),
446
- )
447
-
448
- try:
449
- self.parser.parse_args(
450
- [
451
- '--test',
452
- 'nnn=aaa',
453
- ]
454
- )
455
- self.fail('ArgumentTypeError should be raised')
456
- except argparse.ArgumentTypeError as e:
457
- self.assertIn(
458
- 'Invalid keys nnn specified.\nValid keys are:',
459
- str(e),
460
- )
423
+ self.assertRaises(
424
+ SystemExit,
425
+ self.parser.parse_args,
426
+ ['--test', 'req1=aaa,bbb='],
427
+ )
428
+
429
+ self.assertRaises(
430
+ SystemExit,
431
+ self.parser.parse_args,
432
+ ['--test', 'nnn=aaa'],
433
+ )
461
434
 
462
435
  def test_mkvca_value_no_key(self):
463
- try:
464
- self.parser.parse_args(
465
- [
466
- '--test',
467
- 'req1=aaa,=bbb',
468
- ]
469
- )
470
- self.fail('ArgumentTypeError should be raised')
471
- except argparse.ArgumentTypeError as e:
472
- self.assertEqual(
473
- "A key must be specified before '=': =bbb",
474
- str(e),
475
- )
476
- try:
477
- self.parser.parse_args(
478
- [
479
- '--test',
480
- '=nnn',
481
- ]
482
- )
483
- self.fail('ArgumentTypeError should be raised')
484
- except argparse.ArgumentTypeError as e:
485
- self.assertEqual(
486
- "A key must be specified before '=': =nnn",
487
- str(e),
488
- )
489
-
490
- try:
491
- self.parser.parse_args(
492
- [
493
- '--test',
494
- 'nnn',
495
- ]
496
- )
497
- self.fail('ArgumentTypeError should be raised')
498
- except argparse.ArgumentTypeError as e:
499
- self.assertIn(
500
- 'A key=value pair is required:',
501
- str(e),
502
- )
436
+ self.assertRaises(
437
+ SystemExit,
438
+ self.parser.parse_args,
439
+ ['--test', 'req1=aaa,=bbb'],
440
+ )
441
+ self.assertRaises(
442
+ SystemExit,
443
+ self.parser.parse_args,
444
+ ['--test', '=nnn'],
445
+ )
446
+ self.assertRaises(
447
+ SystemExit,
448
+ self.parser.parse_args,
449
+ ['--test', 'nnn'],
450
+ )
503
451
 
504
452
  def test_mkvca_required_keys_not_list(self):
505
453
  self.assertRaises(
@@ -532,7 +480,7 @@ class TestMultiKeyValueCommaAction(utils.TestCase):
532
480
 
533
481
  class TestNonNegativeAction(utils.TestCase):
534
482
  def setUp(self):
535
- super(TestNonNegativeAction, self).setUp()
483
+ super().setUp()
536
484
 
537
485
  self.parser = argparse.ArgumentParser()
538
486
 
@@ -546,7 +494,7 @@ class TestNonNegativeAction(utils.TestCase):
546
494
 
547
495
  def test_negative_values(self):
548
496
  self.assertRaises(
549
- argparse.ArgumentTypeError,
497
+ SystemExit,
550
498
  self.parser.parse_args,
551
499
  "--foo -1".split(),
552
500
  )
@@ -27,7 +27,7 @@ timing_url = 'http://localhost:5000'
27
27
  timing_elapsed = 0.872809
28
28
 
29
29
 
30
- class FakeGenericClient(object):
30
+ class FakeGenericClient:
31
31
  def __init__(self, **kwargs):
32
32
  self.auth_token = kwargs['token']
33
33
  self.management_url = kwargs['endpoint']
@@ -40,7 +40,7 @@ class TestTiming(utils.TestCommand):
40
40
  )
41
41
 
42
42
  def setUp(self):
43
- super(TestTiming, self).setUp()
43
+ super().setUp()
44
44
 
45
45
  self.app.timing_data = []
46
46
 
osc_lib/tests/fakes.py CHANGED
@@ -60,12 +60,12 @@ def to_unicode_dict(catalog_dict):
60
60
  elif isinstance(catalog_dict, list):
61
61
  return [to_unicode_dict(element) for element in catalog_dict]
62
62
  elif isinstance(catalog_dict, str):
63
- return catalog_dict + u""
63
+ return catalog_dict + ""
64
64
  else:
65
65
  return catalog_dict
66
66
 
67
67
 
68
- class FakeStdout(object):
68
+ class FakeStdout:
69
69
  def __init__(self):
70
70
  self.content = []
71
71
 
@@ -79,7 +79,7 @@ class FakeStdout(object):
79
79
  return result
80
80
 
81
81
 
82
- class FakeLog(object):
82
+ class FakeLog:
83
83
  def __init__(self):
84
84
  self.messages = {}
85
85
 
@@ -99,7 +99,7 @@ class FakeLog(object):
99
99
  self.messages['critical'] = msg
100
100
 
101
101
 
102
- class FakeApp(object):
102
+ class FakeApp:
103
103
  def __init__(self, _stdout, _log):
104
104
  self.stdout = _stdout
105
105
  self.client_manager = None
@@ -110,12 +110,12 @@ class FakeApp(object):
110
110
  self.log = _log
111
111
 
112
112
 
113
- class FakeOptions(object):
113
+ class FakeOptions:
114
114
  def __init__(self, **kwargs):
115
115
  self.os_beta_command = False
116
116
 
117
117
 
118
- class FakeClientManager(object):
118
+ class FakeClientManager:
119
119
  def __init__(self):
120
120
  self.compute = None
121
121
  self.identity = None
@@ -139,7 +139,7 @@ class FakeClientManager(object):
139
139
  }
140
140
 
141
141
 
142
- class FakeModule(object):
142
+ class FakeModule:
143
143
  def __init__(self, name, version):
144
144
  self.name = name
145
145
  self.__version__ = version
@@ -148,7 +148,7 @@ class FakeModule(object):
148
148
  self.version.__version__ = version
149
149
 
150
150
 
151
- class FakeResource(object):
151
+ class FakeResource:
152
152
  def __init__(self, manager=None, info=None, loaded=False, methods=None):
153
153
  """Set attributes and methods for a resource.
154
154
 
@@ -191,8 +191,8 @@ class FakeResource(object):
191
191
  reprkeys = sorted(
192
192
  k for k in self.__dict__.keys() if k[0] != '_' and k != 'manager'
193
193
  )
194
- info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
195
- return "<%s %s>" % (self.__class__.__name__, info)
194
+ info = ", ".join(f"{k}={getattr(self, k)}" for k in reprkeys)
195
+ return f"<{self.__class__.__name__} {info}>"
196
196
 
197
197
  def keys(self):
198
198
  return self._info.keys()
@@ -49,7 +49,7 @@ AUTH_DICT = {
49
49
  auth.get_options_list()
50
50
 
51
51
 
52
- class Container(object):
52
+ class Container:
53
53
  attr = clientmanager.ClientCache(lambda x: object())
54
54
  buggy_attr = clientmanager.ClientCache(lambda x: x.foo)
55
55
 
@@ -76,7 +76,7 @@ class TestFileFormatter(utils.TestCase):
76
76
  )
77
77
 
78
78
  def test_options(self):
79
- class Opts(object):
79
+ class Opts:
80
80
  cloud = 'cloudy'
81
81
  os_project_name = 'projecty'
82
82
  username = 'usernamey'
@@ -107,7 +107,7 @@ class TestFileFormatter(utils.TestCase):
107
107
 
108
108
  class TestLogConfigurator(utils.TestCase):
109
109
  def setUp(self):
110
- super(TestLogConfigurator, self).setUp()
110
+ super().setUp()
111
111
  self.options = mock.Mock()
112
112
  self.options.verbose_level = 1
113
113
  self.options.log_file = None
@@ -123,7 +123,7 @@ class TestShellArgV(utils.TestShell):
123
123
  """Test the deferred help flag"""
124
124
 
125
125
  def setUp(self):
126
- super(TestShellArgV, self).setUp()
126
+ super().setUp()
127
127
 
128
128
  def test_shell_argv(self):
129
129
  """Test argv decoding
@@ -148,14 +148,14 @@ class TestShellArgV(utils.TestShell):
148
148
 
149
149
  # When shell.main() gets sys.argv itself it should be decoded
150
150
  shell.main()
151
- self.assertEqual(type(u'x'), type(self.app.call_args[0][0][0]))
151
+ self.assertEqual(str, type(self.app.call_args[0][0][0]))
152
152
 
153
153
 
154
154
  class TestShellHelp(utils.TestShell):
155
155
  """Test the deferred help flag"""
156
156
 
157
157
  def setUp(self):
158
- super(TestShellHelp, self).setUp()
158
+ super().setUp()
159
159
  self.useFixture(utils.EnvFixture())
160
160
 
161
161
  @testtools.skip("skip until bug 1444983 is resolved")
@@ -182,7 +182,7 @@ class TestShellOptions(utils.TestShell):
182
182
  """
183
183
 
184
184
  def setUp(self):
185
- super(TestShellOptions, self).setUp()
185
+ super().setUp()
186
186
  self.useFixture(utils.EnvFixture())
187
187
 
188
188
  def test_empty_auth(self):
@@ -213,7 +213,7 @@ class TestShellCli(utils.TestShell):
213
213
  """
214
214
 
215
215
  def setUp(self):
216
- super(TestShellCli, self).setUp()
216
+ super().setUp()
217
217
  env = {}
218
218
  self.useFixture(utils.EnvFixture(env.copy()))
219
219
 
@@ -288,19 +288,19 @@ class TestShellCli(utils.TestShell):
288
288
 
289
289
  # Default
290
290
  utils.fake_execute(_shell, "module list")
291
- self.assertEqual('', _shell.options.cert)
292
- self.assertEqual('', _shell.options.key)
291
+ self.assertIsNone(_shell.options.cert)
292
+ self.assertIsNone(_shell.options.key)
293
293
  self.assertIsNone(_shell.client_manager.cert)
294
294
 
295
295
  # --os-cert
296
296
  utils.fake_execute(_shell, "--os-cert mycert module list")
297
297
  self.assertEqual('mycert', _shell.options.cert)
298
- self.assertEqual('', _shell.options.key)
298
+ self.assertIsNone(_shell.options.key)
299
299
  self.assertEqual('mycert', _shell.client_manager.cert)
300
300
 
301
301
  # --os-key
302
302
  utils.fake_execute(_shell, "--os-key mickey module list")
303
- self.assertEqual('', _shell.options.cert)
303
+ self.assertIsNone(_shell.options.cert)
304
304
  self.assertEqual('mickey', _shell.options.key)
305
305
  self.assertIsNone(_shell.client_manager.cert)
306
306
 
@@ -465,7 +465,7 @@ class TestShellCliPrecedence(utils.TestShell):
465
465
  """Test option precedencr order"""
466
466
 
467
467
  def setUp(self):
468
- super(TestShellCliPrecedence, self).setUp()
468
+ super().setUp()
469
469
  env = {
470
470
  'OS_CLOUD': 'megacloud',
471
471
  'OS_REGION_NAME': 'occ-env',
@@ -14,7 +14,6 @@
14
14
  # under the License.
15
15
  #
16
16
 
17
- import contextlib
18
17
  import copy
19
18
  import json as jsonutils
20
19
  import os
@@ -108,33 +107,15 @@ class TestCase(testtools.TestCase):
108
107
 
109
108
  if m.called:
110
109
  if not msg:
111
- msg = 'method %s should not have been called' % m
110
+ msg = f'method {m} should not have been called'
112
111
  self.fail(msg)
113
112
 
114
- @contextlib.contextmanager
115
- def subTest(self, *args, **kwargs):
116
- """This is a wrapper to unittest's subTest method.
117
-
118
- This wrapper suppresses 2 issues:
119
- * lack of support in older Python versions
120
- * bug in testtools that breaks support for all versions
121
- """
122
- try:
123
- with super(TestCase, self).subTest(*args, **kwargs):
124
- yield
125
- except TypeError:
126
- raise
127
- except AttributeError:
128
- # TODO(elhararb): remove this except clause when subTest is
129
- # enabled in testtools
130
- yield
131
-
132
113
 
133
114
  class TestCommand(TestCase):
134
115
  """Test cliff command classes"""
135
116
 
136
117
  def setUp(self):
137
- super(TestCommand, self).setUp()
118
+ super().setUp()
138
119
  # Build up a fake app
139
120
  self.fake_stdout = fakes.FakeStdout()
140
121
  self.fake_log = fakes.FakeLog()
@@ -201,7 +182,7 @@ class TestClientManager(TestCase):
201
182
  }
202
183
 
203
184
  def setUp(self):
204
- super(TestClientManager, self).setUp()
185
+ super().setUp()
205
186
  self.mock = mock.Mock()
206
187
  self.requests = self.useFixture(fixture.Fixture())
207
188
  # fake v2password token retrieval
@@ -319,7 +300,7 @@ class TestShell(TestCase):
319
300
  shell_class_name = "osc_lib.shell.OpenStackShell"
320
301
 
321
302
  def setUp(self):
322
- super(TestShell, self).setUp()
303
+ super().setUp()
323
304
  self.shell_class = importutils.import_class(self.shell_class_name)
324
305
  self.cmd_patch = mock.patch(self.shell_class_name + ".run_subcommand")
325
306
  self.cmd_save = self.cmd_patch.start()
@@ -349,7 +330,7 @@ class TestShell(TestCase):
349
330
  self.assertEqual(
350
331
  default_args[k],
351
332
  vars(_shell.options)[k],
352
- "%s does not match" % k,
333
+ f"{k} does not match",
353
334
  )
354
335
 
355
336
  def _assert_cloud_region_arg(self, cmd_options, default_args):
@@ -377,7 +358,7 @@ class TestShell(TestCase):
377
358
  self.assertEqual(
378
359
  default_args[k],
379
360
  vars(opts)[k],
380
- "%s does not match" % k,
361
+ f"{k} does not match",
381
362
  )
382
363
 
383
364
  def _test_options_init_app(self, test_opts):
@@ -13,6 +13,7 @@
13
13
  # under the License.
14
14
 
15
15
  import argparse
16
+ import functools
16
17
  import sys
17
18
  from unittest import mock
18
19
 
@@ -27,7 +28,9 @@ def help_enhancer(_h):
27
28
 
28
29
  class TestTags(test_utils.TestCase):
29
30
  def test_add_tag_filtering_option_to_parser(self):
30
- parser = argparse.ArgumentParser()
31
+ parser = argparse.ArgumentParser(
32
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
33
+ )
31
34
  tags.add_tag_filtering_option_to_parser(parser, 'test')
32
35
 
33
36
  parsed_args = parser.parse_args(
@@ -60,7 +63,9 @@ class TestTags(test_utils.TestCase):
60
63
  self.assertCountEqual(expected, actual)
61
64
 
62
65
  def test_get_tag_filtering_args(self):
63
- parser = argparse.ArgumentParser()
66
+ parser = argparse.ArgumentParser(
67
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
68
+ )
64
69
  tags.add_tag_filtering_option_to_parser(parser, 'test')
65
70
 
66
71
  parsed_args = parser.parse_args(
@@ -86,7 +91,9 @@ class TestTags(test_utils.TestCase):
86
91
  self.assertEqual(expected, args)
87
92
 
88
93
  def test_add_tag_option_to_parser_for_create(self):
89
- parser = argparse.ArgumentParser()
94
+ parser = argparse.ArgumentParser(
95
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
96
+ )
90
97
  tags.add_tag_option_to_parser_for_create(parser, 'test')
91
98
 
92
99
  # Test that --tag and --no-tag are mutually exclusive
@@ -105,7 +112,9 @@ class TestTags(test_utils.TestCase):
105
112
  self.assertCountEqual(expected, actual)
106
113
 
107
114
  def test_add_tag_option_to_parser_for_set(self):
108
- parser = argparse.ArgumentParser()
115
+ parser = argparse.ArgumentParser(
116
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
117
+ )
109
118
  tags.add_tag_option_to_parser_for_set(parser, 'test')
110
119
 
111
120
  parsed_args = parser.parse_args(['--tag', 'tag1'])
@@ -119,7 +128,9 @@ class TestTags(test_utils.TestCase):
119
128
  self.assertCountEqual(expected, actual)
120
129
 
121
130
  def test_add_tag_option_to_parser_for_unset(self):
122
- parser = argparse.ArgumentParser()
131
+ parser = argparse.ArgumentParser(
132
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
133
+ )
123
134
  tags.add_tag_option_to_parser_for_unset(parser, 'test')
124
135
 
125
136
  # Test that --tag and --all-tag are mutually exclusive
@@ -209,11 +220,15 @@ class TestTagHelps(test_utils.TestCase):
209
220
  options_name = 'options'
210
221
  else:
211
222
  options_name = 'optional arguments'
212
- parser = argparse.ArgumentParser()
223
+ parser = argparse.ArgumentParser(
224
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
225
+ )
213
226
  meth(parser, 'test')
214
227
  self.assertEqual(exp_normal % options_name, parser.format_help())
215
228
 
216
- parser = argparse.ArgumentParser()
229
+ parser = argparse.ArgumentParser(
230
+ formatter_class=functools.partial(argparse.HelpFormatter, width=78)
231
+ )
217
232
  meth(parser, 'test', enhance_help=help_enhancer)
218
233
  self.assertEqual(exp_enhanced % options_name, parser.format_help())
219
234
 
@@ -368,7 +368,7 @@ class TestUtils(test_utils.TestCase):
368
368
  self.assertFalse(utils.is_ascii(b'\xe2'))
369
369
 
370
370
  def test_is_ascii_string(self):
371
- self.assertFalse(utils.is_ascii(u'\u2665'))
371
+ self.assertFalse(utils.is_ascii('\u2665'))
372
372
 
373
373
  def test_format_size(self):
374
374
  self.assertEqual("999", utils.format_size(999))
@@ -460,11 +460,6 @@ class TestUtils(test_utils.TestCase):
460
460
  self.assertEqual('fake-id', res_id)
461
461
  return res_attr
462
462
 
463
- def test_get_item_properties_with_format_func(self):
464
- formatters = {'attr': utils.format_list}
465
- res_attr = self._test_get_item_properties_with_formatter(formatters)
466
- self.assertEqual(utils.format_list(['a', 'b']), res_attr)
467
-
468
463
  def test_get_item_properties_with_formattable_column(self):
469
464
  formatters = {'attr': format_columns.ListColumn}
470
465
  res_attr = self._test_get_item_properties_with_formatter(formatters)
@@ -479,11 +474,6 @@ class TestUtils(test_utils.TestCase):
479
474
  self.assertEqual('fake-id', res_id)
480
475
  return res_attr
481
476
 
482
- def test_get_dict_properties_with_format_func(self):
483
- formatters = {'attr': utils.format_list}
484
- res_attr = self._test_get_dict_properties_with_formatter(formatters)
485
- self.assertEqual(utils.format_list(['a', 'b']), res_attr)
486
-
487
477
  def test_get_dict_properties_with_formattable_column(self):
488
478
  formatters = {'attr': format_columns.ListColumn}
489
479
  res_attr = self._test_get_dict_properties_with_formatter(formatters)
@@ -544,7 +534,7 @@ class NoUniqueMatch(Exception):
544
534
 
545
535
  class TestFindResource(test_utils.TestCase):
546
536
  def setUp(self):
547
- super(TestFindResource, self).setUp()
537
+ super().setUp()
548
538
  self.name = 'legos'
549
539
  self.expected = mock.Mock()
550
540
  self.manager = mock.Mock()
@@ -711,7 +701,7 @@ class TestFindResource(test_utils.TestCase):
711
701
  self.name,
712
702
  )
713
703
  self.assertEqual(
714
- "More than one resource exists " "with the name or ID 'legos'.",
704
+ "More than one resource exists with the name or ID 'legos'.",
715
705
  str(result),
716
706
  )
717
707
  self.manager.get.assert_called_with(self.name)
@@ -920,7 +910,7 @@ class TestAssertItemEqual(test_utils.TestCommand):
920
910
 
921
911
  class TestSDKUtils(test_utils.TestCase):
922
912
  def setUp(self):
923
- super(TestSDKUtils, self).setUp()
913
+ super().setUp()
924
914
 
925
915
  def _test_get_osc_show_columns_for_sdk_resource(
926
916
  self,