python-openstackclient 9.0.0__py3-none-any.whl → 10.1.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.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +59 -43
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +36 -34
- openstackclient/common/pagination.py +50 -6
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +11 -6
- openstackclient/common/quota.py +105 -103
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +42 -22
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +16 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +35 -16
- openstackclient/compute/v2/server.py +268 -179
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +28 -12
- openstackclient/compute/v2/server_group.py +23 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +27 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +13 -5
- openstackclient/compute/v2/service.py +17 -8
- openstackclient/compute/v2/usage.py +28 -23
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +82 -47
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +32 -12
- openstackclient/identity/v3/application_credential.py +66 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +39 -17
- openstackclient/identity/v3/domain.py +40 -19
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +98 -64
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +44 -20
- openstackclient/identity/v3/group.py +64 -40
- openstackclient/identity/v3/identity_provider.py +95 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +42 -17
- openstackclient/identity/v3/mapping.py +58 -28
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +59 -26
- openstackclient/identity/v3/region.py +39 -17
- openstackclient/identity/v3/registered_limit.py +41 -16
- openstackclient/identity/v3/role.py +62 -31
- openstackclient/identity/v3/role_assignment.py +25 -7
- openstackclient/identity/v3/service.py +39 -17
- openstackclient/identity/v3/service_provider.py +40 -16
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +39 -18
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +86 -36
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +16 -11
- openstackclient/image/v2/image.py +88 -56
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +117 -20
- openstackclient/image/v2/metadef_objects.py +32 -19
- openstackclient/image/v2/metadef_properties.py +30 -16
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +25 -27
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +27 -54
- openstackclient/network/v2/address_group.py +39 -16
- openstackclient/network/v2/address_scope.py +36 -20
- openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +226 -0
- openstackclient/network/v2/bgpvpn/port_association.py +504 -0
- openstackclient/network/v2/bgpvpn/router_association.py +301 -0
- openstackclient/network/v2/default_security_group_rule.py +31 -14
- openstackclient/network/v2/floating_ip.py +121 -162
- openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +499 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +610 -0
- openstackclient/network/v2/ip_availability.py +25 -8
- openstackclient/network/v2/l3_conntrack_helper.py +35 -13
- openstackclient/network/v2/local_ip.py +27 -13
- openstackclient/network/v2/local_ip_association.py +17 -7
- openstackclient/network/v2/ndp_proxy.py +23 -11
- openstackclient/network/v2/network.py +213 -213
- openstackclient/network/v2/network_agent.py +77 -34
- openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
- openstackclient/network/v2/network_flavor.py +45 -21
- openstackclient/network/v2/network_flavor_profile.py +42 -17
- openstackclient/network/v2/network_meter.py +39 -15
- openstackclient/network/v2/network_meter_rule.py +40 -12
- openstackclient/network/v2/network_qos_policy.py +39 -21
- openstackclient/network/v2/network_qos_rule.py +48 -18
- openstackclient/network/v2/network_qos_rule_type.py +28 -9
- openstackclient/network/v2/network_rbac.py +34 -16
- openstackclient/network/v2/network_segment.py +32 -11
- openstackclient/network/v2/network_segment_range.py +70 -31
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +41 -22
- openstackclient/network/v2/port.py +141 -40
- openstackclient/network/v2/router.py +101 -67
- openstackclient/network/v2/security_group.py +97 -198
- openstackclient/network/v2/security_group_rule.py +115 -282
- openstackclient/network/v2/subnet.py +63 -34
- openstackclient/network/v2/subnet_pool.py +42 -24
- openstackclient/network/v2/taas/tap_flow.py +35 -14
- openstackclient/network/v2/taas/tap_mirror.py +28 -14
- openstackclient/network/v2/taas/tap_service.py +26 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +28 -16
- openstackclient/object/v1/object.py +28 -16
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +59 -19
- openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_limits.py +1 -1
- openstackclient/tests/unit/common/test_module.py +82 -44
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +15 -26
- openstackclient/tests/unit/compute/v2/fakes.py +26 -57
- openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
- openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
- openstackclient/tests/unit/compute/v2/test_console.py +2 -2
- openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
- openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
- openstackclient/tests/unit/compute/v2/test_host.py +3 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
- openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
- openstackclient/tests/unit/compute/v2/test_server.py +26 -111
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
- openstackclient/tests/unit/compute/v2/test_service.py +3 -3
- openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
- openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
- openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
- openstackclient/tests/unit/identity/v3/fakes.py +8 -38
- openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
- openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
- openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
- openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
- openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +12 -22
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
- openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
- openstackclient/tests/unit/identity/v3/test_project.py +28 -5
- openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
- openstackclient/tests/unit/identity/v3/test_region.py +5 -5
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_role.py +8 -8
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v3/test_service.py +5 -5
- openstackclient/tests/unit/identity/v3/test_token.py +2 -2
- openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +77 -10
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fakes.py +5 -77
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +26 -2
- openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
- openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
- openstackclient/tests/unit/network/v2/test_network.py +74 -12
- openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_port.py +166 -0
- openstackclient/tests/unit/network/v2/test_router.py +36 -16
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
- openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +21 -140
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +205 -100
- openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
- openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
- openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +60 -30
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -23
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +49 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/backup_record.py +94 -0
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/consistency_group.py +400 -0
- openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
- openstackclient/volume/v3/qos_specs.py +389 -0
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +92 -40
- openstackclient/volume/v3/volume_attachment.py +47 -21
- openstackclient/volume/v3/volume_backend.py +130 -0
- openstackclient/volume/v3/volume_backup.py +55 -27
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +34 -17
- openstackclient/volume/v3/volume_group_type.py +27 -14
- openstackclient/volume/v3/volume_host.py +74 -0
- openstackclient/volume/v3/volume_message.py +18 -8
- openstackclient/volume/v3/volume_snapshot.py +70 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
- python_openstackclient-10.1.0.dist-info/RECORD +524 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-9.0.0.dist-info/RECORD +0 -499
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
|
@@ -14,29 +14,12 @@
|
|
|
14
14
|
#
|
|
15
15
|
|
|
16
16
|
import copy
|
|
17
|
-
from unittest import mock
|
|
18
17
|
|
|
19
|
-
from openstackclient.api import object_store_v1 as object_store
|
|
20
18
|
from openstackclient.object.v1 import object as obj
|
|
21
19
|
from openstackclient.tests.unit.object.v1 import fakes as object_fakes
|
|
22
20
|
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
AUTH_URL = "http://0.0.0.0"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class TestObject(object_fakes.TestObjectv1):
|
|
29
|
-
def setUp(self):
|
|
30
|
-
super().setUp()
|
|
31
|
-
self.app.client_manager.object_store = object_store.APIv1(
|
|
32
|
-
session=mock.Mock(),
|
|
33
|
-
service_type="object-store",
|
|
34
|
-
)
|
|
35
|
-
self.api = self.app.client_manager.object_store
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@mock.patch('openstackclient.api.object_store_v1.APIv1.object_list')
|
|
39
|
-
class TestObjectList(TestObject):
|
|
22
|
+
class TestObjectList(object_fakes.TestObjectV1):
|
|
40
23
|
columns = ('Name',)
|
|
41
24
|
datalist = ((object_fakes.object_name_2,),)
|
|
42
25
|
|
|
@@ -46,8 +29,8 @@ class TestObjectList(TestObject):
|
|
|
46
29
|
# Get the command object to test
|
|
47
30
|
self.cmd = obj.ListObject(self.app, None)
|
|
48
31
|
|
|
49
|
-
def test_object_list_objects_no_options(self
|
|
50
|
-
|
|
32
|
+
def test_object_list_objects_no_options(self):
|
|
33
|
+
self.object_store_client.object_list.return_value = [
|
|
51
34
|
copy.deepcopy(object_fakes.OBJECT),
|
|
52
35
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
53
36
|
]
|
|
@@ -65,7 +48,7 @@ class TestObjectList(TestObject):
|
|
|
65
48
|
# containing the data to be listed.
|
|
66
49
|
columns, data = self.cmd.take_action(parsed_args)
|
|
67
50
|
|
|
68
|
-
|
|
51
|
+
self.object_store_client.object_list.assert_called_with(
|
|
69
52
|
container=object_fakes.container_name,
|
|
70
53
|
)
|
|
71
54
|
|
|
@@ -76,8 +59,8 @@ class TestObjectList(TestObject):
|
|
|
76
59
|
)
|
|
77
60
|
self.assertEqual(datalist, tuple(data))
|
|
78
61
|
|
|
79
|
-
def test_object_list_objects_prefix(self
|
|
80
|
-
|
|
62
|
+
def test_object_list_objects_prefix(self):
|
|
63
|
+
self.object_store_client.object_list.return_value = [
|
|
81
64
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
82
65
|
]
|
|
83
66
|
|
|
@@ -97,19 +80,16 @@ class TestObjectList(TestObject):
|
|
|
97
80
|
# containing the data to be listed.
|
|
98
81
|
columns, data = self.cmd.take_action(parsed_args)
|
|
99
82
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
o_mock.assert_called_with(
|
|
105
|
-
container=object_fakes.container_name_2, **kwargs
|
|
83
|
+
self.object_store_client.object_list.assert_called_with(
|
|
84
|
+
container=object_fakes.container_name_2,
|
|
85
|
+
prefix='floppy',
|
|
106
86
|
)
|
|
107
87
|
|
|
108
88
|
self.assertEqual(self.columns, columns)
|
|
109
89
|
self.assertEqual(self.datalist, tuple(data))
|
|
110
90
|
|
|
111
|
-
def test_object_list_objects_delimiter(self
|
|
112
|
-
|
|
91
|
+
def test_object_list_objects_delimiter(self):
|
|
92
|
+
self.object_store_client.object_list.return_value = [
|
|
113
93
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
114
94
|
]
|
|
115
95
|
|
|
@@ -129,19 +109,16 @@ class TestObjectList(TestObject):
|
|
|
129
109
|
# containing the data to be listed.
|
|
130
110
|
columns, data = self.cmd.take_action(parsed_args)
|
|
131
111
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
o_mock.assert_called_with(
|
|
137
|
-
container=object_fakes.container_name_2, **kwargs
|
|
112
|
+
self.object_store_client.object_list.assert_called_with(
|
|
113
|
+
container=object_fakes.container_name_2,
|
|
114
|
+
delimiter='=',
|
|
138
115
|
)
|
|
139
116
|
|
|
140
117
|
self.assertEqual(self.columns, columns)
|
|
141
118
|
self.assertEqual(self.datalist, tuple(data))
|
|
142
119
|
|
|
143
|
-
def test_object_list_objects_marker(self
|
|
144
|
-
|
|
120
|
+
def test_object_list_objects_marker(self):
|
|
121
|
+
self.object_store_client.object_list.return_value = [
|
|
145
122
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
146
123
|
]
|
|
147
124
|
|
|
@@ -161,19 +138,16 @@ class TestObjectList(TestObject):
|
|
|
161
138
|
# containing the data to be listed.
|
|
162
139
|
columns, data = self.cmd.take_action(parsed_args)
|
|
163
140
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
o_mock.assert_called_with(
|
|
169
|
-
container=object_fakes.container_name_2, **kwargs
|
|
141
|
+
self.object_store_client.object_list.assert_called_with(
|
|
142
|
+
container=object_fakes.container_name_2,
|
|
143
|
+
marker=object_fakes.object_name_2,
|
|
170
144
|
)
|
|
171
145
|
|
|
172
146
|
self.assertEqual(self.columns, columns)
|
|
173
147
|
self.assertEqual(self.datalist, tuple(data))
|
|
174
148
|
|
|
175
|
-
def test_object_list_objects_end_marker(self
|
|
176
|
-
|
|
149
|
+
def test_object_list_objects_end_marker(self):
|
|
150
|
+
self.object_store_client.object_list.return_value = [
|
|
177
151
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
178
152
|
]
|
|
179
153
|
|
|
@@ -193,19 +167,16 @@ class TestObjectList(TestObject):
|
|
|
193
167
|
# containing the data to be listed.
|
|
194
168
|
columns, data = self.cmd.take_action(parsed_args)
|
|
195
169
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
o_mock.assert_called_with(
|
|
201
|
-
container=object_fakes.container_name_2, **kwargs
|
|
170
|
+
self.object_store_client.object_list.assert_called_with(
|
|
171
|
+
container=object_fakes.container_name_2,
|
|
172
|
+
end_marker=object_fakes.object_name_2,
|
|
202
173
|
)
|
|
203
174
|
|
|
204
175
|
self.assertEqual(self.columns, columns)
|
|
205
176
|
self.assertEqual(self.datalist, tuple(data))
|
|
206
177
|
|
|
207
|
-
def test_object_list_objects_limit(self
|
|
208
|
-
|
|
178
|
+
def test_object_list_objects_limit(self):
|
|
179
|
+
self.object_store_client.object_list.return_value = [
|
|
209
180
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
210
181
|
]
|
|
211
182
|
|
|
@@ -225,19 +196,16 @@ class TestObjectList(TestObject):
|
|
|
225
196
|
# containing the data to be listed.
|
|
226
197
|
columns, data = self.cmd.take_action(parsed_args)
|
|
227
198
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
o_mock.assert_called_with(
|
|
233
|
-
container=object_fakes.container_name_2, **kwargs
|
|
199
|
+
self.object_store_client.object_list.assert_called_with(
|
|
200
|
+
container=object_fakes.container_name_2,
|
|
201
|
+
limit=2,
|
|
234
202
|
)
|
|
235
203
|
|
|
236
204
|
self.assertEqual(self.columns, columns)
|
|
237
205
|
self.assertEqual(self.datalist, tuple(data))
|
|
238
206
|
|
|
239
|
-
def test_object_list_objects_long(self
|
|
240
|
-
|
|
207
|
+
def test_object_list_objects_long(self):
|
|
208
|
+
self.object_store_client.object_list.return_value = [
|
|
241
209
|
copy.deepcopy(object_fakes.OBJECT),
|
|
242
210
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
243
211
|
]
|
|
@@ -257,10 +225,8 @@ class TestObjectList(TestObject):
|
|
|
257
225
|
# containing the data to be listed.
|
|
258
226
|
columns, data = self.cmd.take_action(parsed_args)
|
|
259
227
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
o_mock.assert_called_with(
|
|
263
|
-
container=object_fakes.container_name, **kwargs
|
|
228
|
+
self.object_store_client.object_list.assert_called_with(
|
|
229
|
+
container=object_fakes.container_name,
|
|
264
230
|
)
|
|
265
231
|
|
|
266
232
|
collist = ('Name', 'Bytes', 'Hash', 'Content Type', 'Last Modified')
|
|
@@ -283,8 +249,8 @@ class TestObjectList(TestObject):
|
|
|
283
249
|
)
|
|
284
250
|
self.assertEqual(datalist, tuple(data))
|
|
285
251
|
|
|
286
|
-
def test_object_list_objects_all(self
|
|
287
|
-
|
|
252
|
+
def test_object_list_objects_all(self):
|
|
253
|
+
self.object_store_client.object_list.return_value = [
|
|
288
254
|
copy.deepcopy(object_fakes.OBJECT),
|
|
289
255
|
copy.deepcopy(object_fakes.OBJECT_2),
|
|
290
256
|
]
|
|
@@ -304,12 +270,9 @@ class TestObjectList(TestObject):
|
|
|
304
270
|
# containing the data to be listed.
|
|
305
271
|
columns, data = self.cmd.take_action(parsed_args)
|
|
306
272
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
o_mock.assert_called_with(
|
|
312
|
-
container=object_fakes.container_name, **kwargs
|
|
273
|
+
self.object_store_client.object_list.assert_called_with(
|
|
274
|
+
container=object_fakes.container_name,
|
|
275
|
+
full_listing=True,
|
|
313
276
|
)
|
|
314
277
|
|
|
315
278
|
self.assertEqual(self.columns, columns)
|
|
@@ -320,16 +283,17 @@ class TestObjectList(TestObject):
|
|
|
320
283
|
self.assertEqual(datalist, tuple(data))
|
|
321
284
|
|
|
322
285
|
|
|
323
|
-
|
|
324
|
-
class TestObjectShow(TestObject):
|
|
286
|
+
class TestObjectShow(object_fakes.TestObjectV1):
|
|
325
287
|
def setUp(self):
|
|
326
288
|
super().setUp()
|
|
327
289
|
|
|
328
290
|
# Get the command object to test
|
|
329
291
|
self.cmd = obj.ShowObject(self.app, None)
|
|
330
292
|
|
|
331
|
-
def test_object_show(self
|
|
332
|
-
|
|
293
|
+
def test_object_show(self):
|
|
294
|
+
self.object_store_client.object_show.return_value = copy.deepcopy(
|
|
295
|
+
object_fakes.OBJECT
|
|
296
|
+
)
|
|
333
297
|
|
|
334
298
|
arglist = [
|
|
335
299
|
object_fakes.container_name,
|
|
@@ -346,13 +310,9 @@ class TestObjectShow(TestObject):
|
|
|
346
310
|
# data to be shown.
|
|
347
311
|
columns, data = self.cmd.take_action(parsed_args)
|
|
348
312
|
|
|
349
|
-
|
|
350
|
-
kwargs = {}
|
|
351
|
-
# lib.container.show_container(api, url, container)
|
|
352
|
-
c_mock.assert_called_with(
|
|
313
|
+
self.object_store_client.object_show.assert_called_with(
|
|
353
314
|
container=object_fakes.container_name,
|
|
354
315
|
object=object_fakes.object_name_1,
|
|
355
|
-
**kwargs,
|
|
356
316
|
)
|
|
357
317
|
|
|
358
318
|
collist = ('bytes', 'content_type', 'hash', 'last_modified', 'name')
|
|
@@ -15,18 +15,25 @@ import copy
|
|
|
15
15
|
import io
|
|
16
16
|
from unittest import mock
|
|
17
17
|
|
|
18
|
+
from keystoneauth1 import session
|
|
18
19
|
from osc_lib import exceptions
|
|
19
20
|
from requests_mock.contrib import fixture
|
|
20
21
|
|
|
22
|
+
from openstackclient.api import object_store_v1 as object_store
|
|
21
23
|
from openstackclient.object.v1 import object as object_cmds
|
|
22
24
|
from openstackclient.tests.unit.object.v1 import fakes as object_fakes
|
|
23
25
|
|
|
24
26
|
|
|
25
|
-
class TestObjectAll(object_fakes.
|
|
27
|
+
class TestObjectAll(object_fakes.TestObjectV1):
|
|
26
28
|
def setUp(self):
|
|
27
29
|
super().setUp()
|
|
28
30
|
|
|
31
|
+
# these tests require a "real" client since we mock requests
|
|
29
32
|
self.requests_mock = self.useFixture(fixture.Fixture())
|
|
33
|
+
self.app.client_manager.object_store = object_store.APIv1(
|
|
34
|
+
session=session.Session(),
|
|
35
|
+
endpoint=object_fakes.ENDPOINT,
|
|
36
|
+
)
|
|
30
37
|
|
|
31
38
|
|
|
32
39
|
class TestObjectCreate(TestObjectAll):
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
2
|
+
# not use this file except in compliance with the License. You may obtain
|
|
3
|
+
# a copy of the License at
|
|
4
|
+
#
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
#
|
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
9
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
10
|
+
# License for the specific language governing permissions and limitations
|
|
11
|
+
# under the License.
|
|
12
|
+
|
|
13
|
+
import importlib.util
|
|
14
|
+
import os
|
|
15
|
+
import re
|
|
16
|
+
import subprocess
|
|
17
|
+
import sys
|
|
18
|
+
import unittest
|
|
19
|
+
|
|
20
|
+
import fixtures
|
|
21
|
+
|
|
22
|
+
ROOT_DIR = os.path.normpath(
|
|
23
|
+
os.path.join(os.path.dirname(__file__), '..', '..', '..')
|
|
24
|
+
)
|
|
25
|
+
SELFTEST_REGEX = re.compile(r'\b(Okay|[HEW]\d{3}|O\d{3}):\s(.*)')
|
|
26
|
+
|
|
27
|
+
# Checks that filter on 'openstackclient/tests/unit' in the filename need the
|
|
28
|
+
# temp file written into that path structure so the check is not skipped.
|
|
29
|
+
_UNIT_TEST_SUBDIRS = {
|
|
30
|
+
'O401': os.path.join('openstackclient', 'tests', 'unit'),
|
|
31
|
+
'O402': os.path.join('openstackclient', 'tests', 'unit'),
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _load_checks():
|
|
36
|
+
spec = importlib.util.spec_from_file_location(
|
|
37
|
+
'_osc_hacking_checks',
|
|
38
|
+
os.path.join(ROOT_DIR, 'hacking', 'checks.py'),
|
|
39
|
+
)
|
|
40
|
+
module = importlib.util.module_from_spec(spec)
|
|
41
|
+
spec.loader.exec_module(module)
|
|
42
|
+
return module
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _get_examples(check):
|
|
46
|
+
for line in check.__doc__.splitlines():
|
|
47
|
+
line = line.lstrip()
|
|
48
|
+
match = SELFTEST_REGEX.match(line)
|
|
49
|
+
if match:
|
|
50
|
+
yield match.group(1), match.group(2)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class HackingTestCase(unittest.TestCase):
|
|
54
|
+
def _test_check(self, code, source):
|
|
55
|
+
lines = [
|
|
56
|
+
part.replace(r'\t', '\t') + '\n' for part in source.split(r'\n')
|
|
57
|
+
]
|
|
58
|
+
subdir = {
|
|
59
|
+
'O401': os.path.join('openstackclient', 'tests', 'unit'),
|
|
60
|
+
'O402': os.path.join('openstackclient', 'tests', 'unit'),
|
|
61
|
+
}.get(code, '')
|
|
62
|
+
|
|
63
|
+
with fixtures.TempDir() as tmp:
|
|
64
|
+
dirpath = os.path.join(tmp.path, subdir) if subdir else tmp.path
|
|
65
|
+
if subdir:
|
|
66
|
+
os.makedirs(dirpath)
|
|
67
|
+
|
|
68
|
+
fpath = os.path.join(dirpath, 'test_tmp.py')
|
|
69
|
+
with open(fpath, 'w') as f:
|
|
70
|
+
f.write(''.join(lines))
|
|
71
|
+
|
|
72
|
+
cmd = [
|
|
73
|
+
sys.executable,
|
|
74
|
+
'-mflake8',
|
|
75
|
+
'--config',
|
|
76
|
+
os.path.join(ROOT_DIR, 'tox.ini'),
|
|
77
|
+
f'--select={code}',
|
|
78
|
+
'--format=%(code)s\t%(path)s\t%(row)d',
|
|
79
|
+
fpath,
|
|
80
|
+
]
|
|
81
|
+
out, _ = subprocess.Popen(
|
|
82
|
+
cmd, stdout=subprocess.PIPE, cwd=ROOT_DIR
|
|
83
|
+
).communicate()
|
|
84
|
+
out = out.decode('utf-8')
|
|
85
|
+
|
|
86
|
+
if code == 'Okay':
|
|
87
|
+
self.assertEqual('', out)
|
|
88
|
+
else:
|
|
89
|
+
self.assertNotEqual('', out, f"Failed to trigger rule {code}")
|
|
90
|
+
self.assertEqual(code, out.split('\t')[0].rstrip(':'), out)
|
|
91
|
+
|
|
92
|
+
def test_checks(self):
|
|
93
|
+
checks_module = _load_checks()
|
|
94
|
+
|
|
95
|
+
for name in sorted(dir(checks_module)):
|
|
96
|
+
check = getattr(checks_module, name)
|
|
97
|
+
if not callable(check):
|
|
98
|
+
continue
|
|
99
|
+
|
|
100
|
+
if getattr(check, 'skip_on_py3', None) is not False:
|
|
101
|
+
continue
|
|
102
|
+
|
|
103
|
+
if not check.__doc__:
|
|
104
|
+
continue
|
|
105
|
+
|
|
106
|
+
for code, source in _get_examples(check):
|
|
107
|
+
with self.subTest(check=name, example=source):
|
|
108
|
+
self._test_check(code, source)
|
|
@@ -38,24 +38,14 @@ class FakeVolumeClient:
|
|
|
38
38
|
self.management_url = kwargs['endpoint']
|
|
39
39
|
self.api_version = api_versions.APIVersion('2.0')
|
|
40
40
|
|
|
41
|
-
self.availability_zones = mock.Mock()
|
|
42
|
-
self.availability_zones.resource_class = fakes.FakeResource(None, {})
|
|
43
41
|
self.backups = mock.Mock()
|
|
44
42
|
self.backups.resource_class = fakes.FakeResource(None, {})
|
|
45
|
-
self.capabilities = mock.Mock()
|
|
46
|
-
self.capabilities.resource_class = fakes.FakeResource(None, {})
|
|
47
43
|
self.cgsnapshots = mock.Mock()
|
|
48
44
|
self.cgsnapshots.resource_class = fakes.FakeResource(None, {})
|
|
49
45
|
self.consistencygroups = mock.Mock()
|
|
50
46
|
self.consistencygroups.resource_class = fakes.FakeResource(None, {})
|
|
51
|
-
self.limits = mock.Mock()
|
|
52
|
-
self.limits.resource_class = fakes.FakeResource(None, {})
|
|
53
|
-
self.pools = mock.Mock()
|
|
54
|
-
self.pools.resource_class = fakes.FakeResource(None, {})
|
|
55
47
|
self.qos_specs = mock.Mock()
|
|
56
48
|
self.qos_specs.resource_class = fakes.FakeResource(None, {})
|
|
57
|
-
self.restores = mock.Mock()
|
|
58
|
-
self.restores.resource_class = fakes.FakeResource(None, {})
|
|
59
49
|
self.services = mock.Mock()
|
|
60
50
|
self.services.resource_class = fakes.FakeResource(None, {})
|
|
61
51
|
self.transfers = mock.Mock()
|
|
@@ -88,6 +78,7 @@ class FakeClientMixin:
|
|
|
88
78
|
self.app.client_manager.sdk_connection.volume = mock.Mock(
|
|
89
79
|
spec=block_storage_v2_proxy.Proxy,
|
|
90
80
|
)
|
|
81
|
+
self.app.client_manager.sdk_connection.volume.api_version = '2'
|
|
91
82
|
self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
|
|
92
83
|
self.set_volume_api_version() # default to the lowest
|
|
93
84
|
|
|
@@ -242,23 +233,6 @@ def create_one_service(attrs=None):
|
|
|
242
233
|
return service
|
|
243
234
|
|
|
244
235
|
|
|
245
|
-
def create_services(attrs=None, count=2):
|
|
246
|
-
"""Create multiple fake services.
|
|
247
|
-
|
|
248
|
-
:param dict attrs:
|
|
249
|
-
A dictionary with all attributes of service
|
|
250
|
-
:param Integer count:
|
|
251
|
-
The number of services to be faked
|
|
252
|
-
:return:
|
|
253
|
-
A list of FakeResource objects
|
|
254
|
-
"""
|
|
255
|
-
services = []
|
|
256
|
-
for n in range(0, count):
|
|
257
|
-
services.append(create_one_service(attrs))
|
|
258
|
-
|
|
259
|
-
return services
|
|
260
|
-
|
|
261
|
-
|
|
262
236
|
def create_one_capability(attrs=None):
|
|
263
237
|
"""Create a fake volume backend capability.
|
|
264
238
|
|
|
@@ -399,6 +373,26 @@ def create_volumes(attrs=None, count=2):
|
|
|
399
373
|
return volumes
|
|
400
374
|
|
|
401
375
|
|
|
376
|
+
def get_volumes(volumes=None, count=2):
|
|
377
|
+
"""Get an iterable MagicMock object with a list of faked volumes.
|
|
378
|
+
|
|
379
|
+
If volumes list is provided, then initialize the Mock object with the
|
|
380
|
+
list. Otherwise create one.
|
|
381
|
+
|
|
382
|
+
:param List volumes:
|
|
383
|
+
A list of FakeResource objects faking volumes
|
|
384
|
+
:param Integer count:
|
|
385
|
+
The number of volumes to be faked
|
|
386
|
+
:return
|
|
387
|
+
An iterable Mock object with side_effect set to a list of faked
|
|
388
|
+
volumes
|
|
389
|
+
"""
|
|
390
|
+
if volumes is None:
|
|
391
|
+
volumes = create_volumes(count)
|
|
392
|
+
|
|
393
|
+
return mock.Mock(side_effect=volumes)
|
|
394
|
+
|
|
395
|
+
|
|
402
396
|
def create_one_sdk_volume(attrs=None):
|
|
403
397
|
"""Create a fake volume.
|
|
404
398
|
|
|
@@ -438,43 +432,6 @@ def create_one_sdk_volume(attrs=None):
|
|
|
438
432
|
return _volume.Volume(**volume_info)
|
|
439
433
|
|
|
440
434
|
|
|
441
|
-
def create_sdk_volumes(attrs=None, count=2):
|
|
442
|
-
"""Create multiple fake volumes.
|
|
443
|
-
|
|
444
|
-
:param dict attrs:
|
|
445
|
-
A dictionary with all attributes of volume
|
|
446
|
-
:param Integer count:
|
|
447
|
-
The number of volumes to be faked
|
|
448
|
-
:return:
|
|
449
|
-
A list of FakeResource objects
|
|
450
|
-
"""
|
|
451
|
-
volumes = []
|
|
452
|
-
for n in range(0, count):
|
|
453
|
-
volumes.append(create_one_sdk_volume(attrs))
|
|
454
|
-
|
|
455
|
-
return volumes
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
def get_volumes(volumes=None, count=2):
|
|
459
|
-
"""Get an iterable MagicMock object with a list of faked volumes.
|
|
460
|
-
|
|
461
|
-
If volumes list is provided, then initialize the Mock object with the
|
|
462
|
-
list. Otherwise create one.
|
|
463
|
-
|
|
464
|
-
:param List volumes:
|
|
465
|
-
A list of FakeResource objects faking volumes
|
|
466
|
-
:param Integer count:
|
|
467
|
-
The number of volumes to be faked
|
|
468
|
-
:return
|
|
469
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
470
|
-
volumes
|
|
471
|
-
"""
|
|
472
|
-
if volumes is None:
|
|
473
|
-
volumes = create_volumes(count)
|
|
474
|
-
|
|
475
|
-
return mock.Mock(side_effect=volumes)
|
|
476
|
-
|
|
477
|
-
|
|
478
435
|
def create_one_backup(attrs=None):
|
|
479
436
|
"""Create a fake backup.
|
|
480
437
|
|
|
@@ -512,44 +469,6 @@ def create_one_backup(attrs=None):
|
|
|
512
469
|
return backup
|
|
513
470
|
|
|
514
471
|
|
|
515
|
-
def create_backups(attrs=None, count=2):
|
|
516
|
-
"""Create multiple fake backups.
|
|
517
|
-
|
|
518
|
-
:param dict attrs:
|
|
519
|
-
A dictionary with all attributes
|
|
520
|
-
:param int count:
|
|
521
|
-
The number of backups to fake
|
|
522
|
-
:return: A list of fake
|
|
523
|
-
openstack.block_storage.v2.backup.Backup objects
|
|
524
|
-
"""
|
|
525
|
-
backups = []
|
|
526
|
-
for i in range(0, count):
|
|
527
|
-
backup = create_one_backup(attrs)
|
|
528
|
-
backups.append(backup)
|
|
529
|
-
|
|
530
|
-
return backups
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
def get_backups(backups=None, count=2):
|
|
534
|
-
"""Get an iterable MagicMock object with a list of faked backups.
|
|
535
|
-
|
|
536
|
-
If backups list is provided, then initialize the Mock object with the
|
|
537
|
-
list. Otherwise create one.
|
|
538
|
-
|
|
539
|
-
:param List backups:
|
|
540
|
-
A list of FakeResource objects faking backups
|
|
541
|
-
:param Integer count:
|
|
542
|
-
The number of backups to be faked
|
|
543
|
-
:return
|
|
544
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
545
|
-
backups
|
|
546
|
-
"""
|
|
547
|
-
if backups is None:
|
|
548
|
-
backups = create_backups(count)
|
|
549
|
-
|
|
550
|
-
return mock.Mock(side_effect=backups)
|
|
551
|
-
|
|
552
|
-
|
|
553
472
|
def create_backup_record():
|
|
554
473
|
"""Gets a fake backup record for a given backup.
|
|
555
474
|
|
|
@@ -840,44 +759,6 @@ def create_one_snapshot(attrs=None):
|
|
|
840
759
|
return snapshot
|
|
841
760
|
|
|
842
761
|
|
|
843
|
-
def create_snapshots(attrs=None, count=2):
|
|
844
|
-
"""Create multiple fake snapshots.
|
|
845
|
-
|
|
846
|
-
:param dict attrs:
|
|
847
|
-
A dictionary with all attributes
|
|
848
|
-
:param int count:
|
|
849
|
-
The number of snapshots to fake
|
|
850
|
-
:return:
|
|
851
|
-
A list of FakeResource objects faking the snapshots
|
|
852
|
-
"""
|
|
853
|
-
snapshots = []
|
|
854
|
-
for i in range(0, count):
|
|
855
|
-
snapshot = create_one_snapshot(attrs)
|
|
856
|
-
snapshots.append(snapshot)
|
|
857
|
-
|
|
858
|
-
return snapshots
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
def get_snapshots(snapshots=None, count=2):
|
|
862
|
-
"""Get an iterable MagicMock object with a list of faked snapshots.
|
|
863
|
-
|
|
864
|
-
If snapshots list is provided, then initialize the Mock object with the
|
|
865
|
-
list. Otherwise create one.
|
|
866
|
-
|
|
867
|
-
:param List snapshots:
|
|
868
|
-
A list of FakeResource objects faking snapshots
|
|
869
|
-
:param Integer count:
|
|
870
|
-
The number of snapshots to be faked
|
|
871
|
-
:return
|
|
872
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
873
|
-
snapshots
|
|
874
|
-
"""
|
|
875
|
-
if snapshots is None:
|
|
876
|
-
snapshots = create_snapshots(count)
|
|
877
|
-
|
|
878
|
-
return mock.Mock(side_effect=snapshots)
|
|
879
|
-
|
|
880
|
-
|
|
881
762
|
def create_one_volume_type(attrs=None, methods=None):
|
|
882
763
|
"""Create a fake volume type.
|
|
883
764
|
|
|
@@ -220,11 +220,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
220
220
|
'Incremental',
|
|
221
221
|
'Created At',
|
|
222
222
|
)
|
|
223
|
-
columns_long = columns
|
|
224
|
-
'Availability Zone',
|
|
225
|
-
'Volume',
|
|
226
|
-
'Container',
|
|
227
|
-
)
|
|
223
|
+
columns_long = (*columns, 'Availability Zone', 'Volume', 'Container')
|
|
228
224
|
|
|
229
225
|
def setUp(self):
|
|
230
226
|
super().setUp()
|
|
@@ -297,6 +293,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
297
293
|
all_tenants=False,
|
|
298
294
|
marker=None,
|
|
299
295
|
limit=None,
|
|
296
|
+
max_items=None,
|
|
300
297
|
)
|
|
301
298
|
self.assertEqual(self.columns, columns)
|
|
302
299
|
self.assertCountEqual(self.data, list(data))
|
|
@@ -342,6 +339,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
342
339
|
all_tenants=True,
|
|
343
340
|
marker=self.backups[0].id,
|
|
344
341
|
limit=3,
|
|
342
|
+
max_items=None,
|
|
345
343
|
)
|
|
346
344
|
self.assertEqual(self.columns_long, columns)
|
|
347
345
|
self.assertCountEqual(self.data_long, list(data))
|
|
@@ -390,9 +388,7 @@ class TestBackupRestore(volume_fakes.TestVolume):
|
|
|
390
388
|
|
|
391
389
|
columns, data = self.cmd.take_action(parsed_args)
|
|
392
390
|
self.volume_sdk_client.restore_backup.assert_called_with(
|
|
393
|
-
self.backup.id,
|
|
394
|
-
volume_id=None,
|
|
395
|
-
name=None,
|
|
391
|
+
self.backup.id, volume=None, name=None
|
|
396
392
|
)
|
|
397
393
|
|
|
398
394
|
self.assertEqual(self.columns, columns)
|
|
@@ -414,9 +410,7 @@ class TestBackupRestore(volume_fakes.TestVolume):
|
|
|
414
410
|
|
|
415
411
|
columns, data = self.cmd.take_action(parsed_args)
|
|
416
412
|
self.volume_sdk_client.restore_backup.assert_called_with(
|
|
417
|
-
self.backup.id,
|
|
418
|
-
volume_id=None,
|
|
419
|
-
name=self.backup.volume_id,
|
|
413
|
+
self.backup.id, volume=None, name=self.backup.volume_id
|
|
420
414
|
)
|
|
421
415
|
|
|
422
416
|
self.assertEqual(self.columns, columns)
|
|
@@ -437,9 +431,7 @@ class TestBackupRestore(volume_fakes.TestVolume):
|
|
|
437
431
|
|
|
438
432
|
columns, data = self.cmd.take_action(parsed_args)
|
|
439
433
|
self.volume_sdk_client.restore_backup.assert_called_with(
|
|
440
|
-
self.backup.id,
|
|
441
|
-
volume_id=self.volume.id,
|
|
442
|
-
name=None,
|
|
434
|
+
self.backup.id, volume=self.volume.id, name=None
|
|
443
435
|
)
|
|
444
436
|
|
|
445
437
|
self.assertEqual(self.columns, columns)
|