python-openstackclient 7.2.1__py3-none-any.whl → 7.3.1__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.
- openstackclient/common/limits.py +1 -1
- openstackclient/common/quota.py +7 -2
- openstackclient/compute/v2/server.py +38 -22
- openstackclient/compute/v2/usage.py +2 -2
- openstackclient/identity/common.py +22 -34
- openstackclient/identity/v3/credential.py +45 -28
- openstackclient/identity/v3/limit.py +15 -0
- openstackclient/identity/v3/region.py +23 -22
- openstackclient/identity/v3/registered_limit.py +18 -0
- openstackclient/identity/v3/role.py +287 -117
- openstackclient/identity/v3/role_assignment.py +1 -1
- openstackclient/identity/v3/service_provider.py +95 -45
- openstackclient/identity/v3/trust.py +114 -75
- openstackclient/image/v2/image.py +3 -0
- openstackclient/network/v2/network.py +33 -0
- openstackclient/network/v2/network_flavor_profile.py +1 -17
- openstackclient/network/v2/port.py +75 -20
- openstackclient/tests/functional/compute/v2/test_server.py +87 -1
- openstackclient/tests/functional/identity/v3/common.py +1 -1
- openstackclient/tests/functional/identity/v3/test_application_credential.py +2 -1
- openstackclient/tests/functional/identity/v3/test_role.py +24 -0
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +8 -0
- openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -5
- openstackclient/tests/functional/network/v2/test_port.py +107 -1
- openstackclient/tests/unit/compute/v2/fakes.py +0 -304
- openstackclient/tests/unit/compute/v2/test_aggregate.py +40 -31
- openstackclient/tests/unit/compute/v2/test_console.py +7 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +60 -53
- openstackclient/tests/unit/compute/v2/test_keypair.py +57 -69
- openstackclient/tests/unit/compute/v2/test_server.py +63 -5
- openstackclient/tests/unit/compute/v2/test_server_group.py +99 -105
- openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -5
- openstackclient/tests/unit/compute/v2/test_service.py +83 -37
- openstackclient/tests/unit/compute/v2/test_usage.py +12 -7
- openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -6
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -2
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +2 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +6 -20
- openstackclient/tests/unit/identity/v3/test_catalog.py +2 -5
- openstackclient/tests/unit/identity/v3/test_credential.py +74 -63
- openstackclient/tests/unit/identity/v3/test_project.py +1 -3
- openstackclient/tests/unit/identity/v3/test_region.py +74 -96
- openstackclient/tests/unit/identity/v3/test_role.py +679 -603
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +263 -1
- openstackclient/tests/unit/identity/v3/test_service_provider.py +159 -209
- openstackclient/tests/unit/identity/v3/test_token.py +5 -20
- openstackclient/tests/unit/identity/v3/test_trust.py +137 -155
- openstackclient/tests/unit/image/v2/test_image.py +6 -0
- openstackclient/tests/unit/network/v2/fakes.py +3 -0
- openstackclient/tests/unit/network/v2/test_network.py +25 -0
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +0 -35
- openstackclient/tests/unit/network/v2/test_port.py +128 -15
- openstackclient/tests/unit/utils.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +31 -13
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +34 -13
- openstackclient/volume/v2/volume_backup.py +11 -2
- openstackclient/volume/v3/volume_backup.py +13 -2
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/AUTHORS +2 -0
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/METADATA +14 -16
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/RECORD +65 -65
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/WHEEL +1 -1
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/entry_points.txt +0 -1
- python_openstackclient-7.3.1.dist-info/pbr.json +1 -0
- python_openstackclient-7.2.1.dist-info/pbr.json +0 -1
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/LICENSE +0 -0
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/top_level.txt +0 -0
|
@@ -165,10 +165,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
165
165
|
arglist = ['--user', self.user.name]
|
|
166
166
|
verifylist = [
|
|
167
167
|
('user', self.user.name),
|
|
168
|
+
('user_domain', None),
|
|
168
169
|
('group', None),
|
|
170
|
+
('group_domain', None),
|
|
169
171
|
('system', None),
|
|
170
172
|
('domain', None),
|
|
171
173
|
('project', None),
|
|
174
|
+
('project_domain', None),
|
|
172
175
|
('role', None),
|
|
173
176
|
('effective', None),
|
|
174
177
|
('inherited', False),
|
|
@@ -181,6 +184,79 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
181
184
|
# containing the data to be listed.
|
|
182
185
|
columns, data = self.cmd.take_action(parsed_args)
|
|
183
186
|
|
|
187
|
+
self.identity_sdk_client.find_user.assert_called_with(
|
|
188
|
+
name_or_id=self.user.name, ignore_missing=False, domain_id=None
|
|
189
|
+
)
|
|
190
|
+
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
191
|
+
role_id=None,
|
|
192
|
+
user_id=self.user.id,
|
|
193
|
+
group_id=None,
|
|
194
|
+
scope_project_id=None,
|
|
195
|
+
scope_domain_id=None,
|
|
196
|
+
scope_system=None,
|
|
197
|
+
effective=None,
|
|
198
|
+
include_names=None,
|
|
199
|
+
inherited_to=None,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
self.assertEqual(self.columns, columns)
|
|
203
|
+
datalist = (
|
|
204
|
+
(
|
|
205
|
+
self.role.id,
|
|
206
|
+
self.user.id,
|
|
207
|
+
'',
|
|
208
|
+
'',
|
|
209
|
+
self.domain.id,
|
|
210
|
+
'',
|
|
211
|
+
False,
|
|
212
|
+
),
|
|
213
|
+
(
|
|
214
|
+
self.role.id,
|
|
215
|
+
self.user.id,
|
|
216
|
+
'',
|
|
217
|
+
self.project.id,
|
|
218
|
+
'',
|
|
219
|
+
'',
|
|
220
|
+
False,
|
|
221
|
+
),
|
|
222
|
+
)
|
|
223
|
+
self.assertEqual(datalist, tuple(data))
|
|
224
|
+
|
|
225
|
+
def test_role_assignment_list_user_with_domain(self):
|
|
226
|
+
self.identity_sdk_client.role_assignments.return_value = [
|
|
227
|
+
self.assignment_with_domain_id_and_user_id,
|
|
228
|
+
self.assignment_with_project_id_and_user_id,
|
|
229
|
+
]
|
|
230
|
+
|
|
231
|
+
arglist = ['--user', self.user.name, '--user-domain', self.domain.name]
|
|
232
|
+
verifylist = [
|
|
233
|
+
('user', self.user.name),
|
|
234
|
+
('user_domain', self.domain.name),
|
|
235
|
+
('group', None),
|
|
236
|
+
('group_domain', None),
|
|
237
|
+
('system', None),
|
|
238
|
+
('domain', None),
|
|
239
|
+
('project', None),
|
|
240
|
+
('role', None),
|
|
241
|
+
('effective', None),
|
|
242
|
+
('inherited', False),
|
|
243
|
+
('names', False),
|
|
244
|
+
]
|
|
245
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
246
|
+
|
|
247
|
+
# In base command class Lister in cliff, abstract method take_action()
|
|
248
|
+
# returns a tuple containing the column names and an iterable
|
|
249
|
+
# containing the data to be listed.
|
|
250
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
251
|
+
|
|
252
|
+
self.identity_sdk_client.find_domain.assert_called_with(
|
|
253
|
+
name_or_id=self.domain.name, ignore_missing=False
|
|
254
|
+
)
|
|
255
|
+
self.identity_sdk_client.find_user.assert_called_with(
|
|
256
|
+
name_or_id=self.user.name,
|
|
257
|
+
ignore_missing=False,
|
|
258
|
+
domain_id=self.domain.id,
|
|
259
|
+
)
|
|
184
260
|
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
185
261
|
role_id=None,
|
|
186
262
|
user_id=self.user.id,
|
|
@@ -230,10 +306,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
230
306
|
arglist = ['--user', self.user.id]
|
|
231
307
|
verifylist = [
|
|
232
308
|
('user', self.user.id),
|
|
309
|
+
('user_domain', None),
|
|
233
310
|
('group', None),
|
|
311
|
+
('group_domain', None),
|
|
234
312
|
('system', None),
|
|
235
313
|
('domain', None),
|
|
236
314
|
('project', None),
|
|
315
|
+
('project_domain', None),
|
|
237
316
|
('role', None),
|
|
238
317
|
('effective', None),
|
|
239
318
|
('inherited', False),
|
|
@@ -290,10 +369,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
290
369
|
arglist = ['--group', self.group.name]
|
|
291
370
|
verifylist = [
|
|
292
371
|
('user', None),
|
|
372
|
+
('user_domain', None),
|
|
293
373
|
('group', self.group.name),
|
|
374
|
+
('group_domain', None),
|
|
294
375
|
('system', None),
|
|
295
376
|
('domain', None),
|
|
296
377
|
('project', None),
|
|
378
|
+
('project_domain', None),
|
|
297
379
|
('role', None),
|
|
298
380
|
('effective', None),
|
|
299
381
|
('inherited', False),
|
|
@@ -306,6 +388,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
306
388
|
# containing the data to be listed.
|
|
307
389
|
columns, data = self.cmd.take_action(parsed_args)
|
|
308
390
|
|
|
391
|
+
self.identity_sdk_client.find_group.assert_called_with(
|
|
392
|
+
name_or_id=self.group.name, ignore_missing=False, domain_id=None
|
|
393
|
+
)
|
|
394
|
+
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
395
|
+
role_id=None,
|
|
396
|
+
user_id=None,
|
|
397
|
+
group_id=self.group.id,
|
|
398
|
+
scope_project_id=None,
|
|
399
|
+
scope_domain_id=None,
|
|
400
|
+
scope_system=None,
|
|
401
|
+
effective=None,
|
|
402
|
+
include_names=None,
|
|
403
|
+
inherited_to=None,
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
self.assertEqual(self.columns, columns)
|
|
407
|
+
datalist = (
|
|
408
|
+
(
|
|
409
|
+
self.role.id,
|
|
410
|
+
'',
|
|
411
|
+
self.group.id,
|
|
412
|
+
'',
|
|
413
|
+
self.domain.id,
|
|
414
|
+
'',
|
|
415
|
+
False,
|
|
416
|
+
),
|
|
417
|
+
(
|
|
418
|
+
self.role.id,
|
|
419
|
+
'',
|
|
420
|
+
self.group.id,
|
|
421
|
+
self.project.id,
|
|
422
|
+
'',
|
|
423
|
+
'',
|
|
424
|
+
False,
|
|
425
|
+
),
|
|
426
|
+
)
|
|
427
|
+
self.assertEqual(datalist, tuple(data))
|
|
428
|
+
|
|
429
|
+
def test_role_assignment_list_group_with_domain(self):
|
|
430
|
+
self.identity_sdk_client.role_assignments.return_value = [
|
|
431
|
+
self.assignment_with_domain_id_and_group_id,
|
|
432
|
+
self.assignment_with_project_id_and_group_id,
|
|
433
|
+
]
|
|
434
|
+
|
|
435
|
+
arglist = [
|
|
436
|
+
'--group',
|
|
437
|
+
self.group.name,
|
|
438
|
+
'--group-domain',
|
|
439
|
+
self.domain.name,
|
|
440
|
+
]
|
|
441
|
+
verifylist = [
|
|
442
|
+
('user', None),
|
|
443
|
+
('user_domain', None),
|
|
444
|
+
('group', self.group.name),
|
|
445
|
+
('group_domain', self.domain.name),
|
|
446
|
+
('system', None),
|
|
447
|
+
('domain', None),
|
|
448
|
+
('project', None),
|
|
449
|
+
('project_domain', None),
|
|
450
|
+
('role', None),
|
|
451
|
+
('effective', None),
|
|
452
|
+
('inherited', False),
|
|
453
|
+
('names', False),
|
|
454
|
+
]
|
|
455
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
456
|
+
|
|
457
|
+
# In base command class Lister in cliff, abstract method take_action()
|
|
458
|
+
# returns a tuple containing the column names and an iterable
|
|
459
|
+
# containing the data to be listed.
|
|
460
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
461
|
+
|
|
462
|
+
self.identity_sdk_client.find_domain.assert_called_with(
|
|
463
|
+
name_or_id=self.domain.name, ignore_missing=False
|
|
464
|
+
)
|
|
465
|
+
self.identity_sdk_client.find_group.assert_called_with(
|
|
466
|
+
name_or_id=self.group.name,
|
|
467
|
+
ignore_missing=False,
|
|
468
|
+
domain_id=self.domain.id,
|
|
469
|
+
)
|
|
309
470
|
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
310
471
|
role_id=None,
|
|
311
472
|
user_id=None,
|
|
@@ -350,10 +511,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
350
511
|
arglist = ['--domain', self.domain.name]
|
|
351
512
|
verifylist = [
|
|
352
513
|
('user', None),
|
|
514
|
+
('user_domain', None),
|
|
353
515
|
('group', None),
|
|
516
|
+
('group_domain', None),
|
|
354
517
|
('system', None),
|
|
355
518
|
('domain', self.domain.name),
|
|
356
519
|
('project', None),
|
|
520
|
+
('project_domain', None),
|
|
357
521
|
('role', None),
|
|
358
522
|
('effective', None),
|
|
359
523
|
('inherited', False),
|
|
@@ -410,10 +574,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
410
574
|
arglist = ['--project', self.project.name]
|
|
411
575
|
verifylist = [
|
|
412
576
|
('user', None),
|
|
577
|
+
('user_domain', None),
|
|
413
578
|
('group', None),
|
|
579
|
+
('group_domain', None),
|
|
414
580
|
('system', None),
|
|
415
581
|
('domain', None),
|
|
416
582
|
('project', self.project.name),
|
|
583
|
+
('project_domain', None),
|
|
417
584
|
('role', None),
|
|
418
585
|
('effective', None),
|
|
419
586
|
('inherited', False),
|
|
@@ -426,6 +593,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
426
593
|
# containing the data to be listed.
|
|
427
594
|
columns, data = self.cmd.take_action(parsed_args)
|
|
428
595
|
|
|
596
|
+
self.identity_sdk_client.find_project.assert_called_with(
|
|
597
|
+
name_or_id=self.project.name, ignore_missing=False, domain_id=None
|
|
598
|
+
)
|
|
599
|
+
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
600
|
+
role_id=None,
|
|
601
|
+
user_id=None,
|
|
602
|
+
group_id=None,
|
|
603
|
+
scope_project_id=self.project.id,
|
|
604
|
+
scope_domain_id=None,
|
|
605
|
+
scope_system=None,
|
|
606
|
+
effective=None,
|
|
607
|
+
include_names=None,
|
|
608
|
+
inherited_to=None,
|
|
609
|
+
)
|
|
610
|
+
|
|
611
|
+
self.assertEqual(self.columns, columns)
|
|
612
|
+
datalist = (
|
|
613
|
+
(
|
|
614
|
+
self.role.id,
|
|
615
|
+
self.user.id,
|
|
616
|
+
'',
|
|
617
|
+
self.project.id,
|
|
618
|
+
'',
|
|
619
|
+
'',
|
|
620
|
+
False,
|
|
621
|
+
),
|
|
622
|
+
(
|
|
623
|
+
self.role.id,
|
|
624
|
+
'',
|
|
625
|
+
self.group.id,
|
|
626
|
+
self.project.id,
|
|
627
|
+
'',
|
|
628
|
+
'',
|
|
629
|
+
False,
|
|
630
|
+
),
|
|
631
|
+
)
|
|
632
|
+
self.assertEqual(datalist, tuple(data))
|
|
633
|
+
|
|
634
|
+
def test_role_assignment_list_project_with_domain(self):
|
|
635
|
+
self.identity_sdk_client.role_assignments.return_value = [
|
|
636
|
+
self.assignment_with_project_id_and_user_id,
|
|
637
|
+
self.assignment_with_project_id_and_group_id,
|
|
638
|
+
]
|
|
639
|
+
|
|
640
|
+
arglist = [
|
|
641
|
+
'--project',
|
|
642
|
+
self.project.name,
|
|
643
|
+
'--project-domain',
|
|
644
|
+
self.domain.name,
|
|
645
|
+
]
|
|
646
|
+
verifylist = [
|
|
647
|
+
('user', None),
|
|
648
|
+
('user_domain', None),
|
|
649
|
+
('group', None),
|
|
650
|
+
('group_domain', None),
|
|
651
|
+
('system', None),
|
|
652
|
+
('domain', None),
|
|
653
|
+
('project', self.project.name),
|
|
654
|
+
('project_domain', self.domain.name),
|
|
655
|
+
('role', None),
|
|
656
|
+
('effective', None),
|
|
657
|
+
('inherited', False),
|
|
658
|
+
('names', False),
|
|
659
|
+
]
|
|
660
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
661
|
+
|
|
662
|
+
# In base command class Lister in cliff, abstract method take_action()
|
|
663
|
+
# returns a tuple containing the column names and an iterable
|
|
664
|
+
# containing the data to be listed.
|
|
665
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
666
|
+
|
|
667
|
+
self.identity_sdk_client.find_domain.assert_called_with(
|
|
668
|
+
name_or_id=self.domain.name, ignore_missing=False
|
|
669
|
+
)
|
|
670
|
+
self.identity_sdk_client.find_project.assert_called_with(
|
|
671
|
+
name_or_id=self.project.name,
|
|
672
|
+
ignore_missing=False,
|
|
673
|
+
domain_id=self.domain.id,
|
|
674
|
+
)
|
|
429
675
|
self.identity_sdk_client.role_assignments.assert_called_with(
|
|
430
676
|
role_id=None,
|
|
431
677
|
user_id=None,
|
|
@@ -462,7 +708,8 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
462
708
|
self.assertEqual(datalist, tuple(data))
|
|
463
709
|
|
|
464
710
|
def test_role_assignment_list_def_creds(self):
|
|
465
|
-
|
|
711
|
+
self.app.client_manager.auth_ref = mock.Mock()
|
|
712
|
+
auth_ref = self.app.client_manager.auth_ref
|
|
466
713
|
auth_ref.project_id.return_value = self.project.id
|
|
467
714
|
auth_ref.user_id.return_value = self.user.id
|
|
468
715
|
|
|
@@ -476,10 +723,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
476
723
|
]
|
|
477
724
|
verifylist = [
|
|
478
725
|
('user', None),
|
|
726
|
+
('user_domain', None),
|
|
479
727
|
('group', None),
|
|
728
|
+
('group_domain', None),
|
|
480
729
|
('system', None),
|
|
481
730
|
('domain', None),
|
|
482
731
|
('project', None),
|
|
732
|
+
('project_domain', None),
|
|
483
733
|
('role', None),
|
|
484
734
|
('effective', None),
|
|
485
735
|
('inherited', False),
|
|
@@ -529,10 +779,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
529
779
|
arglist = ['--effective']
|
|
530
780
|
verifylist = [
|
|
531
781
|
('user', None),
|
|
782
|
+
('user_domain', None),
|
|
532
783
|
('group', None),
|
|
784
|
+
('group_domain', None),
|
|
533
785
|
('system', None),
|
|
534
786
|
('domain', None),
|
|
535
787
|
('project', None),
|
|
788
|
+
('project_domain', None),
|
|
536
789
|
('role', None),
|
|
537
790
|
('effective', True),
|
|
538
791
|
('inherited', False),
|
|
@@ -611,10 +864,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
611
864
|
arglist = ['--inherited']
|
|
612
865
|
verifylist = [
|
|
613
866
|
('user', None),
|
|
867
|
+
('user_domain', None),
|
|
614
868
|
('group', None),
|
|
869
|
+
('group_domain', None),
|
|
615
870
|
('system', None),
|
|
616
871
|
('domain', None),
|
|
617
872
|
('project', None),
|
|
873
|
+
('project_domain', None),
|
|
618
874
|
('role', None),
|
|
619
875
|
('effective', None),
|
|
620
876
|
('inherited', True),
|
|
@@ -707,10 +963,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
707
963
|
arglist = ['--names']
|
|
708
964
|
verifylist = [
|
|
709
965
|
('user', None),
|
|
966
|
+
('user_domain', None),
|
|
710
967
|
('group', None),
|
|
968
|
+
('group_domain', None),
|
|
711
969
|
('system', None),
|
|
712
970
|
('domain', None),
|
|
713
971
|
('project', None),
|
|
972
|
+
('project_domain', None),
|
|
714
973
|
('role', None),
|
|
715
974
|
('effective', None),
|
|
716
975
|
('inherited', False),
|
|
@@ -799,10 +1058,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
|
|
|
799
1058
|
]
|
|
800
1059
|
verifylist = [
|
|
801
1060
|
('user', None),
|
|
1061
|
+
('user_domain', None),
|
|
802
1062
|
('group', None),
|
|
1063
|
+
('group_domain', None),
|
|
803
1064
|
('system', None),
|
|
804
1065
|
('domain', None),
|
|
805
1066
|
('project', None),
|
|
1067
|
+
('project_domain', None),
|
|
806
1068
|
('role', role_2.name),
|
|
807
1069
|
('effective', None),
|
|
808
1070
|
('inherited', False),
|