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.
- osc_lib/api/api.py +67 -30
- osc_lib/api/auth.py +39 -25
- osc_lib/api/utils.py +10 -5
- osc_lib/cli/client_config.py +55 -35
- osc_lib/cli/format_columns.py +19 -17
- osc_lib/cli/identity.py +14 -3
- osc_lib/cli/pagination.py +83 -0
- osc_lib/cli/parseractions.py +116 -37
- osc_lib/clientmanager.py +49 -28
- osc_lib/command/command.py +20 -9
- osc_lib/command/timing.py +11 -1
- osc_lib/exceptions.py +13 -3
- osc_lib/logs.py +19 -9
- osc_lib/py.typed +0 -0
- osc_lib/shell.py +73 -56
- osc_lib/tests/api/fakes.py +1 -1
- osc_lib/tests/api/test_api.py +5 -5
- osc_lib/tests/api/test_utils.py +1 -1
- osc_lib/tests/cli/test_client_config.py +1 -1
- osc_lib/tests/cli/test_format_columns.py +1 -1
- osc_lib/tests/cli/test_parseractions.py +48 -100
- osc_lib/tests/command/test_timing.py +2 -2
- osc_lib/tests/fakes.py +10 -10
- osc_lib/tests/test_clientmanager.py +1 -1
- osc_lib/tests/test_logs.py +2 -2
- osc_lib/tests/test_shell.py +10 -10
- osc_lib/tests/utils/__init__.py +6 -25
- osc_lib/tests/utils/test_tags.py +22 -7
- osc_lib/tests/utils/test_utils.py +4 -14
- osc_lib/utils/__init__.py +183 -111
- osc_lib/utils/columns.py +25 -11
- osc_lib/utils/tags.py +39 -21
- {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/AUTHORS +1 -0
- {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/METADATA +11 -13
- osc_lib-4.0.0.dist-info/RECORD +53 -0
- {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/WHEEL +1 -1
- osc_lib-4.0.0.dist-info/pbr.json +1 -0
- osc_lib-3.1.0.dist-info/RECORD +0 -51
- osc_lib-3.1.0.dist-info/pbr.json +0 -1
- {osc_lib-3.1.0.dist-info → osc_lib-4.0.0.dist-info}/LICENSE +0 -0
- {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(
|
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(
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
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
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
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
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
self.
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
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(
|
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
|
-
|
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
|
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(
|
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 +
|
63
|
+
return catalog_dict + ""
|
64
64
|
else:
|
65
65
|
return catalog_dict
|
66
66
|
|
67
67
|
|
68
|
-
class FakeStdout
|
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
|
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
|
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
|
113
|
+
class FakeOptions:
|
114
114
|
def __init__(self, **kwargs):
|
115
115
|
self.os_beta_command = False
|
116
116
|
|
117
117
|
|
118
|
-
class FakeClientManager
|
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
|
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
|
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("
|
195
|
-
return "
|
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()
|
osc_lib/tests/test_logs.py
CHANGED
@@ -76,7 +76,7 @@ class TestFileFormatter(utils.TestCase):
|
|
76
76
|
)
|
77
77
|
|
78
78
|
def test_options(self):
|
79
|
-
class Opts
|
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(
|
110
|
+
super().setUp()
|
111
111
|
self.options = mock.Mock()
|
112
112
|
self.options.verbose_level = 1
|
113
113
|
self.options.log_file = None
|
osc_lib/tests/test_shell.py
CHANGED
@@ -123,7 +123,7 @@ class TestShellArgV(utils.TestShell):
|
|
123
123
|
"""Test the deferred help flag"""
|
124
124
|
|
125
125
|
def setUp(self):
|
126
|
-
super(
|
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(
|
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(
|
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(
|
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(
|
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.
|
292
|
-
self.
|
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.
|
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.
|
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(
|
468
|
+
super().setUp()
|
469
469
|
env = {
|
470
470
|
'OS_CLOUD': 'megacloud',
|
471
471
|
'OS_REGION_NAME': 'occ-env',
|
osc_lib/tests/utils/__init__.py
CHANGED
@@ -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
|
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(
|
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(
|
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(
|
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
|
-
"
|
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
|
-
"
|
361
|
+
f"{k} does not match",
|
381
362
|
)
|
382
363
|
|
383
364
|
def _test_options_init_app(self, test_opts):
|
osc_lib/tests/utils/test_tags.py
CHANGED
@@ -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(
|
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(
|
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
|
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(
|
913
|
+
super().setUp()
|
924
914
|
|
925
915
|
def _test_get_osc_show_columns_for_sdk_resource(
|
926
916
|
self,
|