@@ -923,7 +925,7 @@
diff --git a/docs/html/namespacepyrax_1_1version.html b/docs/html/namespacepyrax_1_1version.html
index 732e3fc0..48f489e1 100644
--- a/docs/html/namespacepyrax_1_1version.html
+++ b/docs/html/namespacepyrax_1_1version.html
@@ -105,7 +105,7 @@
Variable Documentation
@@ -113,7 +113,7 @@
@@ -139,7 +139,7 @@
diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html
index 9fd72f4a..7c8478a7 100644
--- a/docs/html/namespaces.html
+++ b/docs/html/namespaces.html
@@ -81,14 +81,9 @@
Here are the packages with brief descriptions (if available):
- cf_wrapper This module wraps swiftclient , the Python client for OpenStack / Swift, providing an object-oriented interface to the Swift object store
pyrax
pyrax::autoscale
pyrax::base_identity
- pyrax::cf_wrapper
- pyrax::cf_wrapper::client
- pyrax::cf_wrapper::container
- pyrax::cf_wrapper::storage_object
pyrax::client
pyrax::cloudblockstorage
pyrax::clouddatabases
@@ -104,6 +99,7 @@
pyrax::identity::rax_identity
pyrax::image
pyrax::manager
+ pyrax::object_storage
pyrax::queueing
pyrax::resource
pyrax::service_catalog
@@ -129,7 +125,7 @@
diff --git a/docs/html/namespacesetup.html b/docs/html/namespacesetup.html
index 53dec2c2..0b7dc7ec 100644
--- a/docs/html/namespacesetup.html
+++ b/docs/html/namespacesetup.html
@@ -170,11 +170,10 @@
Initial value: 00001 [
00002 "python-novaclient>=2.13.0" ,
00003 "rackspace-novaclient" ,
- 00004 "python-swiftclient>=1.5.0" ,
- 00005 "keyring" ,
- 00006 "requests>=2.2.1" ,
- 00007 "six>=1.5.2" ,
- 00008 ]
+ 00004 "keyring" ,
+ 00005 "requests>=2.2.1" ,
+ 00006 "six>=1.5.2" ,
+ 00007 ]
@@ -216,9 +215,8 @@
Initial value: 00001 [
00002 "pyrax" ,
- 00003 "pyrax/cf_wrapper" ,
- 00004 "pyrax/identity" ,
- 00005 ]
+ 00003 "pyrax/identity" ,
+ 00004 ]
@@ -305,7 +303,7 @@
diff --git a/docs/html/object__storage_8py.html b/docs/html/object__storage_8py.html
new file mode 100644
index 00000000..bf726fe6
--- /dev/null
+++ b/docs/html/object__storage_8py.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+pyrax: pyrax/object_storage.py File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pyrax
+
+
+ Python Bindings for the Rackspace Cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/search/all_5f.js b/docs/html/search/all_5f.js
index a0a42565..25f00335 100644
--- a/docs/html/search/all_5f.js
+++ b/docs/html/search/all_5f.js
@@ -5,14 +5,13 @@ var searchData=
['_5f_5feq_5f_5f',['__eq__',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a449f8fd74d358c0ad641b6c6d6917ba0',1,'pyrax::cloudloadbalancers::Node.__eq__()'],['../classpyrax_1_1resource_1_1BaseResource.html#a449f8fd74d358c0ad641b6c6d6917ba0',1,'pyrax::resource::BaseResource.__eq__()']]],
['_5f_5fexit_5f_5f',['__exit__',['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#a6de07022804200d0fb6383c0a237ee8e',1,'pyrax::utils::SelfDeletingTempfile.__exit__()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#a6de07022804200d0fb6383c0a237ee8e',1,'pyrax::utils::SelfDeletingTempDirectory.__exit__()']]],
['_5f_5fgetattr_5f_5f',['__getattr__',['../classpyrax_1_1base__identity_1_1Endpoint.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::base_identity::Endpoint.__getattr__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::base_identity::BaseIdentity.__getattr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::resource::BaseResource.__getattr__()'],['../classpyrax_1_1utils_1_1DotDict.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::utils::DotDict.__getattr__()']]],
- ['_5f_5finit_5f_5f',['__init__',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroup.__init__()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroupManager.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScalePolicy.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScaleWebhook.__init__()'],['../classpyrax_1_1base__identity_1_1Service.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Service.__init__()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Endpoint.__init__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseIdentity.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::CFClient.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::Connection.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::FolderUploader.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::BulkDeleter.__init__()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::container::Container.__init__()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::storage_object::StorageObject.__init__()'],['../classpyrax_1_1client_1_1BaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::client::BaseClient.__init__()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseInstance.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSPTRRecord.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSManager.__init__()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::ResultsIterator.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::Node.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::VirtualIP.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorCheck.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorClient.__init__()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudnetworks::CloudNetworkClient.__init__()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::AmbiguousEndpoints.__init__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::ClientException.__init__()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObject.__init__()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeService.__init__()'],['../classpyrax_1_1fakes_1_1FakeCSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeFolderUploader.__init__()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBulkDeleter.__init__()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseInstance.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeNovaVolumeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNovaVolumeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageSnapshot.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancer.__init__()'],['../classpyrax_1_1fakes_1_1FakeNode.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNode.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDomain.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSRecord.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDevice.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetworkClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetwork.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScalePolicy.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleWebhook.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroupManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroup.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorCheck.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorNotification.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueue.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClaim.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClaim.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImage.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageMemberManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageTagManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentityService.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentity.__init__()'],['../classpyrax_1_1image_1_1Image.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::image::Image.__init__()'],['../classpyrax_1_1manager_1_1BaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::manager::BaseManager.__init__()'],['../classpyrax_1_1queueing_1_1Queue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::Queue.__init__()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::QueueMessage.__init__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::resource::BaseResource.__init__()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::service_catalog::ServiceCatalog.__init__()'],['../classpyrax_1_1utils_1_1DotDict.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::DotDict.__init__()'],['../classpyrax_1_1utils_1_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
+ ['_5f_5finit_5f_5f',['__init__',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroup.__init__()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroupManager.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScalePolicy.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScaleWebhook.__init__()'],['../classpyrax_1_1base__identity_1_1Service.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Service.__init__()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Endpoint.__init__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseIdentity.__init__()'],['../classpyrax_1_1client_1_1BaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::client::BaseClient.__init__()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseInstance.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSPTRRecord.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSManager.__init__()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::ResultsIterator.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::Node.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::VirtualIP.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorCheck.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorClient.__init__()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudnetworks::CloudNetworkClient.__init__()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::AmbiguousEndpoints.__init__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::ClientException.__init__()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeContainerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeContainerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeContainer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeContainer.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObjectManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObjectManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObject.__init__()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeService.__init__()'],['../classpyrax_1_1fakes_1_1FakeCSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeFolderUploader.__init__()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBulkDeleter.__init__()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseInstance.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeNovaVolumeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNovaVolumeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageSnapshot.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancer.__init__()'],['../classpyrax_1_1fakes_1_1FakeNode.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNode.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDomain.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSRecord.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDevice.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetworkClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetwork.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScalePolicy.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleWebhook.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroupManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroup.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorCheck.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorNotification.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueue.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClaim.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClaim.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImage.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageMemberManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageTagManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentityService.__init__()'],['../classpyrax_1_1fakes_1_1FakeEndpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEndpoint.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentity.__init__()'],['../classpyrax_1_1image_1_1Image.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::image::Image.__init__()'],['../classpyrax_1_1manager_1_1BaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::manager::BaseManager.__init__()'],['../classpyrax_1_1object__storage_1_1Container.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::Container.__init__()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::StorageObject.__init__()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::StorageClient.__init__()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::FolderUploader.__init__()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::BulkDeleter.__init__()'],['../classpyrax_1_1queueing_1_1Queue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::Queue.__init__()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::QueueMessage.__init__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::resource::BaseResource.__init__()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::service_catalog::ServiceCatalog.__init__()'],['../classpyrax_1_1utils_1_1DotDict.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::DotDict.__init__()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::ResultsIterator.__init__()'],['../classpyrax_1_1utils_1_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
['_5f_5finit_5f_5f_2epy',['__init__.py',['../____init_____8py.html',1,'']]],
['_5f_5finit_5f_5f_2epy',['__init__.py',['../identity_2____init_____8py.html',1,'']]],
- ['_5f_5finit_5f_5f_2epy',['__init__.py',['../cf__wrapper_2____init_____8py.html',1,'']]],
- ['_5f_5fiter_5f_5f',['__iter__',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::clouddns::ResultsIterator']]],
+ ['_5f_5fiter_5f_5f',['__iter__',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::clouddns::ResultsIterator.__iter__()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::utils::ResultsIterator.__iter__()']]],
['_5f_5fne_5f_5f',['__ne__',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad69df72a6bf0be3525fe45cd2f77f343',1,'pyrax::cloudloadbalancers::Node']]],
- ['_5f_5fnonzero_5f_5f',['__nonzero__',['../classpyrax_1_1cf__wrapper_1_1container_1_1Fault.html#a14f4a7f4cbfde7254adc73da3b2de9a5',1,'pyrax::cf_wrapper::container::Fault']]],
- ['_5f_5frepr_5f_5f',['__repr__',['../classpyrax_1_1base__identity_1_1Service.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::base_identity::Service.__repr__()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cf_wrapper::container::Container.__repr__()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cf_wrapper::storage_object::StorageObject.__repr__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::clouddns::CloudDNSPTRRecord.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::Node.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::VirtualIP.__repr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::resource::BaseResource.__repr__()']]],
+ ['_5f_5fnonzero_5f_5f',['__nonzero__',['../classpyrax_1_1object__storage_1_1Fault__cls.html#a14f4a7f4cbfde7254adc73da3b2de9a5',1,'pyrax::object_storage::Fault_cls']]],
+ ['_5f_5frepr_5f_5f',['__repr__',['../classpyrax_1_1base__identity_1_1Service.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::base_identity::Service.__repr__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::clouddns::CloudDNSPTRRecord.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::Node.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::VirtualIP.__repr__()'],['../classpyrax_1_1object__storage_1_1Container.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::object_storage::Container.__repr__()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::object_storage::StorageObject.__repr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::resource::BaseResource.__repr__()']]],
['_5f_5fstr_5f_5f',['__str__',['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#aa7a4b9bc0941308e362738503137460e',1,'pyrax::exceptions::AmbiguousEndpoints.__str__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#aa7a4b9bc0941308e362738503137460e',1,'pyrax::exceptions::ClientException.__str__()']]],
['_5fclient_5fclasses',['_client_classes',['../namespacepyrax.html#a4eef1d8d29581de251687dd30b035f3a',1,'pyrax']]],
['_5fcode_5fmap',['_code_map',['../namespacepyrax_1_1exceptions.html#ab5d31bf8fb13068e1eecee2640858771',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_61.js b/docs/html/search/all_61.js
index a5f6b946..c4be6481 100644
--- a/docs/html/search/all_61.js
+++ b/docs/html/search/all_61.js
@@ -1,7 +1,7 @@
var searchData=
[
['accesslistidnotfound',['AccessListIDNotFound',['../classpyrax_1_1exceptions_1_1AccessListIDNotFound.html',1,'pyrax::exceptions']]],
- ['account_5fmeta_5fprefix',['account_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4871daba36a85e962a609e677d654774',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['account_5fmeta_5fprefix',['ACCOUNT_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a0f80cbb0f6e98564cfb5f45109786099',1,'pyrax::object_storage']]],
['action',['action',['../classpyrax_1_1fakes_1_1FakeManager.html#a2f9294757736802ae365f423f1e20b88',1,'pyrax::fakes::FakeManager.action()'],['../classpyrax_1_1manager_1_1BaseManager.html#a2f9294757736802ae365f423f1e20b88',1,'pyrax::manager::BaseManager.action()']]],
['actual_5frun',['actual_run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a7fff87854e7e88a70303035e54c031ce',1,'pyrax::fakes::FakeFolderUploader::actual_run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a7fff87854e7e88a70303035e54c031ce',1,'pyrax::fakes::FakeBulkDeleter::actual_run()']]],
['add',['add',['../classpyrax_1_1image_1_1ImageTagManager.html#a66aa7c8063db6217a0a0061f8b7ba206',1,'pyrax::image::ImageTagManager']]],
@@ -32,6 +32,7 @@ var searchData=
['api',['api',['../classpyrax_1_1fakes_1_1FakeManager.html#a6da13b696f737097e0146e47cc0d0985',1,'pyrax::fakes::FakeManager::api()'],['../classpyrax_1_1manager_1_1BaseManager.html#a6da13b696f737097e0146e47cc0d0985',1,'pyrax::manager::BaseManager::api()']]],
['api_5fdate_5fpattern',['API_DATE_PATTERN',['../namespacepyrax_1_1base__identity.html#abc3f00c435af9a25ee98b025c8df847e',1,'pyrax::base_identity']]],
['api_5fkey',['api_key',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a70651ad93f531b836bca3257d615c95e',1,'pyrax::base_identity::BaseIdentity.api_key()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a70651ad93f531b836bca3257d615c95e',1,'pyrax::identity::rax_identity::RaxIdentity::api_key()']]],
+ ['assure_5fcontainer',['assure_container',['../namespacepyrax_1_1object__storage.html#a5dad832cdbdfccc602bc5f8a482a075b',1,'pyrax::object_storage']]],
['assure_5fdomain',['assure_domain',['../namespacepyrax_1_1clouddns.html#ae456353f0a4abcc4b605b5eeac0656d1',1,'pyrax::clouddns']]],
['assure_5fimage',['assure_image',['../namespacepyrax_1_1image.html#a5e61997540ac52a2c90c2363b3bef66f',1,'pyrax::image']]],
['assure_5finstance',['assure_instance',['../namespacepyrax_1_1clouddatabases.html#a8f8b217553a66a79f0135899e14964b4',1,'pyrax::clouddatabases']]],
@@ -44,7 +45,6 @@ var searchData=
['attach_5fto_5finstance',['attach_to_instance',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#a7a946d1fbbaba8aa5fbad457498e2db4',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.attach_to_instance()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a7a946d1fbbaba8aa5fbad457498e2db4',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.attach_to_instance()']]],
['attempts',['attempts',['../classpyrax_1_1utils_1_1__WaitThread.html#abb0145d5080497f5f4212ca51fbc6316',1,'pyrax::utils::_WaitThread']]],
['attr_5fmap',['attr_map',['../classpyrax_1_1base__identity_1_1Endpoint.html#abe24abfdb59c83fe062d8473359014d6',1,'pyrax::base_identity::Endpoint']]],
- ['auth_5fattempts',['AUTH_ATTEMPTS',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a8086cfcceb4dcb4059f9b974ccf12fea',1,'pyrax::cf_wrapper::client']]],
['auth_5fendpoint',['auth_endpoint',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseIdentity.auth_endpoint'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseIdentity.auth_endpoint'],['../namespacepyrax_1_1identity_1_1rax__identity.html#a62e4aae3f13b88a642e7cd2a19d43f36',1,'pyrax::identity::rax_identity.AUTH_ENDPOINT()']]],
['auth_5ftoken',['auth_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1fbf2af4f60163ea873bf30e0980839e',1,'pyrax::base_identity::BaseIdentity']]],
['auth_5fwith_5ftoken',['auth_with_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a2323e991798b13063610509c2bb4aaf4',1,'pyrax::base_identity::BaseIdentity.auth_with_token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a2323e991798b13063610509c2bb4aaf4',1,'pyrax::fakes::FakeIdentity.auth_with_token()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a2323e991798b13063610509c2bb4aaf4',1,'pyrax::identity::rax_identity::RaxIdentity.auth_with_token()'],['../namespacepyrax.html#a49217af72f2f282731a94b6a6f42823c',1,'pyrax.auth_with_token()']]],
diff --git a/docs/html/search/all_62.js b/docs/html/search/all_62.js
index 2b9a2281..2fb8bd5f 100644
--- a/docs/html/search/all_62.js
+++ b/docs/html/search/all_62.js
@@ -2,14 +2,14 @@ var searchData=
[
['badrequest',['BadRequest',['../classpyrax_1_1exceptions_1_1BadRequest.html',1,'pyrax::exceptions']]],
['base_5fidentity_2epy',['base_identity.py',['../base__identity_8py.html',1,'']]],
- ['base_5fpath',['base_path',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a80ae992797a306309f835d904c520c28',1,'pyrax::cf_wrapper::client::FolderUploader']]],
['baseclient',['BaseClient',['../classpyrax_1_1client_1_1BaseClient.html',1,'pyrax::client']]],
['baseidentity',['BaseIdentity',['../classpyrax_1_1base__identity_1_1BaseIdentity.html',1,'pyrax::base_identity']]],
['basemanager',['BaseManager',['../classpyrax_1_1manager_1_1BaseManager.html',1,'pyrax::manager']]],
['basequeuemanager',['BaseQueueManager',['../classpyrax_1_1queueing_1_1BaseQueueManager.html',1,'pyrax::queueing']]],
['baseresource',['BaseResource',['../classpyrax_1_1resource_1_1BaseResource.html',1,'pyrax::resource']]],
['body',['body',['../classpyrax_1_1fakes_1_1FakeResponse.html#a3f9f361dae8242c0df9e8ff512e21732',1,'pyrax::fakes::FakeResponse.body()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a14d48c2e9f05d0b03044eb45f308fcb0',1,'pyrax::queueing::QueueMessage.body()']]],
- ['bulk_5fdelete',['bulk_delete',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a31f701453fcf7a01b2af1e67d4d9a55b',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['bulk_5fdelete_5finterval',['bulk_delete_interval',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#accd7312117a68637f8a9ad3f2b6968e6',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['bulkdeleter',['BulkDeleter',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html',1,'pyrax::cf_wrapper::client']]]
+ ['bulk_5fdelete',['bulk_delete',['../classpyrax_1_1object__storage_1_1StorageClient.html#a31f701453fcf7a01b2af1e67d4d9a55b',1,'pyrax::object_storage::StorageClient']]],
+ ['bulk_5fdelete_5finterval',['bulk_delete_interval',['../classpyrax_1_1object__storage_1_1StorageClient.html#accd7312117a68637f8a9ad3f2b6968e6',1,'pyrax::object_storage::StorageClient']]],
+ ['bulkdeleter',['BulkDeleter',['../classpyrax_1_1object__storage_1_1BulkDeleter.html',1,'pyrax::object_storage']]],
+ ['bytes',['bytes',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab5b288623cd78ddf5eeabe825d17a1c1',1,'pyrax::fakes::FakeStorageObject']]]
];
diff --git a/docs/html/search/all_63.js b/docs/html/search/all_63.js
index bc8449cb..8ca9faae 100644
--- a/docs/html/search/all_63.js
+++ b/docs/html/search/all_63.js
@@ -2,27 +2,23 @@ var searchData=
[
['callback',['callback',['../classpyrax_1_1utils_1_1__WaitThread.html#adf568d8baca0701772280d0011e68a72',1,'pyrax::utils::_WaitThread']]],
['callstack',['callstack',['../namespacepyrax.html#ae78f359d64f9eeed6dc0df4a1102dca8',1,'pyrax']]],
- ['cancel_5ffolder_5fupload',['cancel_folder_upload',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a621a0e61fdb17290b5e9f5dec5eb12fc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['cancel_5ffolder_5fupload',['cancel_folder_upload',['../classpyrax_1_1object__storage_1_1StorageClient.html#a621a0e61fdb17290b5e9f5dec5eb12fc',1,'pyrax::object_storage::StorageClient']]],
['case_5finsensitive_5fupdate',['case_insensitive_update',['../namespacepyrax_1_1utils.html#af3249b7bd46bd8a85fda01ce6a90304e',1,'pyrax::utils']]],
['catalog',['catalog',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a6be3d84fa45e3612e5d22f1015b288af',1,'pyrax::service_catalog::ServiceCatalog']]],
- ['cdn_5fconnection',['cdn_connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9ebd30d3926b0fe246ca66e564caf148',1,'pyrax::cf_wrapper::client::CFClient.cdn_connection()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#a9ebd30d3926b0fe246ca66e564caf148',1,'pyrax::cf_wrapper::client::Connection.cdn_connection()']]],
- ['cdn_5fenabled',['cdn_enabled',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a15b27a248ed9133d6a84543a420fe2f9',1,'pyrax::cf_wrapper::client::CFClient::cdn_enabled()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2335e6e10f37188b2c023f9c5575c299',1,'pyrax::cf_wrapper::container::Container.cdn_enabled()']]],
- ['cdn_5fios_5furi',['cdn_ios_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a905e4199215ee5839e09aba563d40a39',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5flog_5fretention',['cdn_log_retention',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7ab42343f8fb8b6a8c8464effc0f6765',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fmeta_5fprefix',['cdn_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a031c7c89ca95f8d90c5ce46041dbb983',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['cdn_5frequest',['cdn_request',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ad1c79a1e8a4bbf3b8286ca87c62e6da5',1,'pyrax::cf_wrapper::client::Connection']]],
- ['cdn_5fssl_5furi',['cdn_ssl_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a315a39c261f744f27e1dc2bb09d281c1',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fstreaming_5furi',['cdn_streaming_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a000f4ad534d85c42b466056d02636ca9',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fttl',['cdn_ttl',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2e0f897ad6464bc7dafd9935fa502754',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5furi',['cdn_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2fed2fa3680b223c766240fab5f90bcd',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5furl',['cdn_url',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#af8614020022a9bd864339bd42b8fceb4',1,'pyrax::cf_wrapper::client::Connection']]],
+ ['cdn_5fenabled',['cdn_enabled',['../classpyrax_1_1object__storage_1_1Container.html#a15b27a248ed9133d6a84543a420fe2f9',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fios_5furi',['cdn_ios_uri',['../classpyrax_1_1object__storage_1_1Container.html#a905e4199215ee5839e09aba563d40a39',1,'pyrax::object_storage::Container']]],
+ ['cdn_5flog_5fretention',['cdn_log_retention',['../classpyrax_1_1object__storage_1_1Container.html#a7ab42343f8fb8b6a8c8464effc0f6765',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fmanagement_5furl',['cdn_management_url',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae2aa2d50cffe9e82ed43b142d7ba1805',1,'pyrax::object_storage::StorageClient']]],
+ ['cdn_5frequest',['cdn_request',['../classpyrax_1_1object__storage_1_1StorageClient.html#ad1c79a1e8a4bbf3b8286ca87c62e6da5',1,'pyrax::object_storage::StorageClient']]],
+ ['cdn_5fssl_5furi',['cdn_ssl_uri',['../classpyrax_1_1object__storage_1_1Container.html#a315a39c261f744f27e1dc2bb09d281c1',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fstreaming_5furi',['cdn_streaming_uri',['../classpyrax_1_1object__storage_1_1Container.html#a000f4ad534d85c42b466056d02636ca9',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fttl',['cdn_ttl',['../classpyrax_1_1object__storage_1_1Container.html#a2e0f897ad6464bc7dafd9935fa502754',1,'pyrax::object_storage::Container']]],
+ ['cdn_5furi',['cdn_uri',['../classpyrax_1_1object__storage_1_1Container.html#a2fed2fa3680b223c766240fab5f90bcd',1,'pyrax::object_storage::Container']]],
['cdnfailed',['CDNFailed',['../classpyrax_1_1exceptions_1_1CDNFailed.html',1,'pyrax::exceptions']]],
- ['cf_5fwrapper',['cf_wrapper',['../namespacecf__wrapper.html',1,'']]],
- ['cfclient',['CFClient',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html',1,'pyrax::cf_wrapper::client']]],
- ['change_5fcontent_5ftype',['change_content_type',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a9ff9b500eb0d5020f41595749b3b636f',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
+ ['change_5fcontent_5ftype',['change_content_type',['../classpyrax_1_1object__storage_1_1StorageObject.html#a9ff9b500eb0d5020f41595749b3b636f',1,'pyrax::object_storage::StorageObject']]],
['change_5fimage_5fname',['change_image_name',['../classpyrax_1_1image_1_1ImageClient.html#aee621a307db99440e1f800b60f957ccf',1,'pyrax::image::ImageClient']]],
['change_5fname',['change_name',['../classpyrax_1_1image_1_1Image.html#af42f1a54e0d284d6109f3a994dc44e69',1,'pyrax::image::Image']]],
- ['change_5fobject_5fcontent_5ftype',['change_object_content_type',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::cf_wrapper::client::CFClient.change_object_content_type()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::cf_wrapper::container::Container.change_object_content_type()']]],
+ ['change_5fobject_5fcontent_5ftype',['change_object_content_type',['../classpyrax_1_1object__storage_1_1Container.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::Container.change_object_content_type()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::ContainerManager.change_object_content_type()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::StorageClient.change_object_content_type()']]],
['change_5fpassword',['change_password',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ae31deef7bd7c6a09c61bf83c66f5a16a',1,'pyrax::clouddatabases::CloudDatabaseUser']]],
['change_5fuser_5fpassword',['change_user_password',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseUserManager.change_user_password()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseInstance.change_user_password()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseClient.change_user_password()']]],
['changes_5fsince',['changes_since',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSDomain.changes_since()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSManager.changes_since()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSClient.changes_since()']]],
@@ -35,8 +31,7 @@ var searchData=
['classifiers',['classifiers',['../namespacesetup.html#a501bfc1867c9d0b5d91873982919a191',1,'setup']]],
['clear_5fcredentials',['clear_credentials',['../namespacepyrax.html#ac84933adaea04f7479d32c6a5cf6e028',1,'pyrax']]],
['clear_5ferror_5fpage',['clear_error_page',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#aff0ccd9424518b3db68c4fbc3c99a710',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.clear_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#aff0ccd9424518b3db68c4fbc3c99a710',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.clear_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aff0ccd9424518b3db68c4fbc3c99a710',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.clear_error_page()']]],
- ['client',['client',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::client::FolderUploader.client()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::client::BulkDeleter::client()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::container::Container::client()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::storage_object::StorageObject::client()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeStorageObject::client()'],['../classpyrax_1_1fakes_1_1FakeService.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeService::client()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#af38f414f12df8decbc52ff98ed34af5f',1,'pyrax::base_identity::Endpoint.client()']]],
- ['client_2epy',['client.py',['../cf__wrapper_2client_8py.html',1,'']]],
+ ['client',['client',['../classpyrax_1_1fakes_1_1FakeService.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeService::client()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::object_storage::FolderUploader.client()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::object_storage::BulkDeleter::client()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#af38f414f12df8decbc52ff98ed34af5f',1,'pyrax::base_identity::Endpoint.client()']]],
['client_2epy',['client.py',['../client_8py.html',1,'']]],
['client_5fclass_5ffor_5fservice',['client_class_for_service',['../namespacepyrax.html#af6b6c4cc8a97fc97da7283dc193d8000',1,'pyrax']]],
['client_5fid',['client_id',['../classpyrax_1_1queueing_1_1QueueClient.html#a3880622ca383fee22fbbac18442bae32',1,'pyrax::queueing::QueueClient']]],
@@ -102,7 +97,7 @@ var searchData=
['code',['code',['../classpyrax_1_1exceptions_1_1ClientException.html#afb9ed1b8a27eb20854efe6e23e297683',1,'pyrax::exceptions::ClientException']]],
['coerce_5fstring_5fto_5flist',['coerce_string_to_list',['../namespacepyrax_1_1utils.html#a399c6b9652f5150282c3edb32d4d05f3',1,'pyrax::utils']]],
['comment',['comment',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a8c0288707ed90c2275d70e22bd1f16d9',1,'pyrax::clouddns::CloudDNSRecord.comment()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a8c0288707ed90c2275d70e22bd1f16d9',1,'pyrax::clouddns::CloudDNSPTRRecord.comment()']]],
- ['completed',['completed',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::cf_wrapper::client::BulkDeleter::completed()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::fakes::FakeBulkDeleter.completed()']]],
+ ['completed',['completed',['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::fakes::FakeBulkDeleter.completed()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::object_storage::BulkDeleter::completed()']]],
['condition',['condition',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a4824b91cc0e6b5f112bdd8049af4d7d6',1,'pyrax::cloudloadbalancers::Node']]],
['config_5ffile',['config_file',['../namespacepyrax.html#ae6512f1802b7f1f9cc6f196a0938db60',1,'pyrax']]],
['connect_5fto_5fautoscale',['connect_to_autoscale',['../namespacepyrax.html#a1773238b5af2fb51b54754bbe83b2971',1,'pyrax']]],
@@ -117,31 +112,30 @@ var searchData=
['connect_5fto_5fimages',['connect_to_images',['../namespacepyrax.html#a0adcbd0664ff8fb086c10a68d6f9696c',1,'pyrax']]],
['connect_5fto_5fqueues',['connect_to_queues',['../namespacepyrax.html#ac8d659180e8fac04349063827198b196',1,'pyrax']]],
['connect_5fto_5fservices',['connect_to_services',['../namespacepyrax.html#a708483dfb93616381fb0ec9338ab5528',1,'pyrax']]],
- ['connection',['Connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html',1,'pyrax::cf_wrapper::client']]],
- ['connection',['connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a10275a078bd1abcbebc206cc5d19e18b',1,'pyrax::cf_wrapper::client::CFClient']]],
['connection_5flogging',['connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a863329ee2898f7d6212281bab325e419',1,'pyrax::cloudloadbalancers::CloudLoadBalancer']]],
- ['connection_5fretries',['CONNECTION_RETRIES',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a19074fb0e7d33e5cb6f2fc49877e64c1',1,'pyrax::cf_wrapper::client']]],
- ['connection_5ftimeout',['CONNECTION_TIMEOUT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a32d68802775b5e101a259fb6f3edf5d7',1,'pyrax::cf_wrapper::client']]],
- ['container',['Container',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html',1,'pyrax::cf_wrapper::container']]],
- ['container',['container',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::client::FolderUploader.container()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::client::BulkDeleter.container()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::storage_object::StorageObject.container()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::fakes::FakeStorageObject.container()']]],
- ['container_2epy',['container.py',['../container_8py.html',1,'']]],
- ['container_5fmeta_5fprefix',['container_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6082429a25cf887c6e215dbd6381bb8d',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['container',['container',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::object_storage::FolderUploader.container()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::object_storage::BulkDeleter.container()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a09a2643ef6ccbde0ae42188d3325be36',1,'pyrax::object_storage::StorageObject.container()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a09a2643ef6ccbde0ae42188d3325be36',1,'pyrax::object_storage::StorageObjectManager.container()']]],
+ ['container',['Container',['../classpyrax_1_1object__storage_1_1Container.html',1,'pyrax::object_storage']]],
+ ['container_5fhead_5fprefix',['CONTAINER_HEAD_PREFIX',['../namespacepyrax_1_1object__storage.html#a734bcae6f49af0e0c9e435ba133a8e20',1,'pyrax::object_storage']]],
+ ['container_5fmeta_5fprefix',['CONTAINER_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a7fe46f5679b3f4725212a4cc3a2c651f',1,'pyrax::object_storage']]],
+ ['containermanager',['ContainerManager',['../classpyrax_1_1object__storage_1_1ContainerManager.html',1,'pyrax::object_storage']]],
['content',['content',['../classpyrax_1_1fakes_1_1FakeResponse.html#aaa48247c6e717970fa828bc18b7a1a16',1,'pyrax::fakes::FakeResponse.content()'],['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#a0899ceb404ac85e4aa0d35445b537908',1,'pyrax::fakes::FakeIdentityResponse.content()']]],
['content_5fcaching',['content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a1cd94acd6d68908839cb20d0ad216ba5',1,'pyrax::cloudloadbalancers::CloudLoadBalancer']]],
- ['content_5ftype',['content_type',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::cf_wrapper::storage_object::StorageObject.content_type()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::fakes::FakeStorageObject.content_type()']]],
+ ['content_5ftype',['content_type',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::fakes::FakeStorageObject']]],
['cooldown',['cooldown',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2268f26f552b5fffb9a0cb5fca09048b',1,'pyrax::autoscale::ScalingGroup.cooldown'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2268f26f552b5fffb9a0cb5fca09048b',1,'pyrax::autoscale::ScalingGroup.cooldown']]],
- ['copy',['copy',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a2fa43c22b5f7af93ba8b4a56871f006a',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['copy_5fobject',['copy_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::cf_wrapper::client::CFClient.copy_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::cf_wrapper::container::Container.copy_object()']]],
- ['create',['create',['../classpyrax_1_1client_1_1BaseClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::client::BaseClient.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlanManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlanManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorClient.create()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudnetworks::CloudNetworkClient.create()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeManager.create()'],['../classpyrax_1_1image_1_1ImageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageManager.create()'],['../classpyrax_1_1image_1_1ImageMemberManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageMemberManager.create()'],['../classpyrax_1_1image_1_1ImageTasksManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageTasksManager.create()'],['../classpyrax_1_1image_1_1ImageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageClient.create()'],['../classpyrax_1_1manager_1_1BaseManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::manager::BaseManager.create()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueManager.create()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueClient.create()']]],
+ ['copy',['copy',['../classpyrax_1_1object__storage_1_1StorageObject.html#a2fa43c22b5f7af93ba8b4a56871f006a',1,'pyrax::object_storage::StorageObject']]],
+ ['copy_5fobject',['copy_object',['../classpyrax_1_1object__storage_1_1Container.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::Container.copy_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::ContainerManager.copy_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::StorageClient.copy_object()']]],
+ ['count',['count',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae11b3deb3de3df7dc48e439074023e35',1,'pyrax::object_storage::StorageClient']]],
+ ['create',['create',['../classpyrax_1_1client_1_1BaseClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::client::BaseClient.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlanManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlanManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorClient.create()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudnetworks::CloudNetworkClient.create()'],['../classpyrax_1_1fakes_1_1FakeStorageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeStorageClient.create()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeManager.create()'],['../classpyrax_1_1image_1_1ImageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageManager.create()'],['../classpyrax_1_1image_1_1ImageMemberManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageMemberManager.create()'],['../classpyrax_1_1image_1_1ImageTasksManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageTasksManager.create()'],['../classpyrax_1_1image_1_1ImageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageClient.create()'],['../classpyrax_1_1manager_1_1BaseManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::manager::BaseManager.create()'],['../classpyrax_1_1object__storage_1_1Container.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::Container.create()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::ContainerManager.create()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::StorageObjectManager.create()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueManager.create()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueClient.create()']]],
['create_5falarm',['create_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorEntity.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorCheck.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorClient.create_alarm()']]],
['create_5fbackup',['create_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseManager.create_backup()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_backup()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseClient.create_backup()']]],
['create_5fcheck',['create_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a6fc873d6c66c1173dc63793fd2cc72d6',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.create_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a6fc873d6c66c1173dc63793fd2cc72d6',1,'pyrax::cloudmonitoring::CloudMonitorClient.create_check()']]],
- ['create_5fcontainer',['create_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a31b9196903b253dd2cd99dc4d7a0774e',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['create_5fcontainer',['create_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#acf462fa5cb359e9a9d8113b721bd0769',1,'pyrax::object_storage::StorageClient']]],
['create_5fcontext',['create_context',['../namespacepyrax.html#addcacb55a21dd0665668678a2dde0271',1,'pyrax']]],
['create_5fdatabase',['create_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a287e0595d14610db48012f18e10d60d5',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a287e0595d14610db48012f18e10d60d5',1,'pyrax::clouddatabases::CloudDatabaseClient.create_database()']]],
['create_5fentity',['create_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a287a9c4c88ac4ade6073ff5ad10a8fb9',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['create_5fnotification',['create_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aa1579d27c94116ec606bc01b3944dae0',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['create_5fnotification_5fplan',['create_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#adbe3d30cfff0796002e143442e5eb225',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
+ ['create_5fobject',['create_object',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a9819e66fd5dc8d1688ab30683cf7b1ff',1,'pyrax::object_storage::ContainerManager.create_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a9819e66fd5dc8d1688ab30683cf7b1ff',1,'pyrax::object_storage::StorageClient.create_object()']]],
['create_5fsnapshot',['create_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.create_snapshot()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create_snapshot()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.create_snapshot()']]],
['create_5ftenant',['create_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#afb882c0e80402ee17bf29c7af13d2a38',1,'pyrax::base_identity::BaseIdentity']]],
['create_5fuser',['create_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::base_identity::BaseIdentity.create_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::clouddatabases::CloudDatabaseClient.create_user()']]]
diff --git a/docs/html/search/all_64.js b/docs/html/search/all_64.js
index bf0cfee0..336bc59e 100644
--- a/docs/html/search/all_64.js
+++ b/docs/html/search/all_64.js
@@ -1,44 +1,46 @@
var searchData=
[
['data',['data',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a511ae0b1c13f95e5f08f1a0dd3da3d93',1,'pyrax::clouddns::CloudDNSRecord.data()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a511ae0b1c13f95e5f08f1a0dd3da3d93',1,'pyrax::clouddns::CloudDNSPTRRecord.data()']]],
- ['date_5fformat',['DATE_FORMAT',['../namespacepyrax_1_1base__identity.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::base_identity.DATE_FORMAT()'],['../namespacepyrax_1_1cf__wrapper_1_1client.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::cf_wrapper::client.DATE_FORMAT()']]],
+ ['date_5fformat',['DATE_FORMAT',['../namespacepyrax_1_1base__identity.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::base_identity']]],
['dbupdateunchanged',['DBUpdateUnchanged',['../classpyrax_1_1exceptions_1_1DBUpdateUnchanged.html',1,'pyrax::exceptions']]],
['debug',['debug',['../namespacepyrax.html#a4c919e19877c5868fcd9f7662c236649',1,'pyrax']]],
- ['default_5fcdn_5fttl',['default_cdn_ttl',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a15a3ad1a3abde8c5a3fede95c2b24c19',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['default_5fchunksize',['DEFAULT_CHUNKSIZE',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aba697425d5dbdf43c88a23031c4ba8b1',1,'pyrax::cf_wrapper::client']]],
+ ['default_5fcdn_5fttl',['DEFAULT_CDN_TTL',['../namespacepyrax_1_1object__storage.html#ad62289ecbb5a2744ec31be09bfa378ec',1,'pyrax::object_storage']]],
+ ['default_5fchunksize',['DEFAULT_CHUNKSIZE',['../namespacepyrax_1_1object__storage.html#aba697425d5dbdf43c88a23031c4ba8b1',1,'pyrax::object_storage']]],
['default_5fdelay',['DEFAULT_DELAY',['../namespacepyrax_1_1clouddns.html#a0695d4ce7bb0b1de03ba3068cde8d89a',1,'pyrax::clouddns']]],
['default_5fencoding',['default_encoding',['../namespacepyrax.html#ab8005f4babffb239fd05dbb8c38551b7',1,'pyrax']]],
['default_5fformat',['DEFAULT_FORMAT',['../namespacepyrax_1_1image.html#a44b30658bb5248f1707ea99431b29626',1,'pyrax::image']]],
['default_5fregion',['default_region',['../namespacepyrax.html#affa3c4afe67ff7c721e823ac8b67fa16',1,'pyrax.default_region()'],['../namespacepyrax_1_1base__identity.html#affa3c4afe67ff7c721e823ac8b67fa16',1,'pyrax::base_identity.default_region()']]],
['default_5fretry',['DEFAULT_RETRY',['../namespacepyrax_1_1clouddns.html#aaa69438071807c71e3d2f798f0382e78',1,'pyrax::clouddns']]],
['default_5ftimeout',['DEFAULT_TIMEOUT',['../namespacepyrax_1_1clouddns.html#aa66130c897c01393a63de104588aceb7',1,'pyrax::clouddns']]],
- ['delete',['delete',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScalePolicy.delete()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScaleWebhook.delete()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cf_wrapper::container::Container.delete()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cf_wrapper::storage_object::StorageObject.delete()'],['../classpyrax_1_1client_1_1BaseClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::client::BaseClient.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseDatabase.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseUser.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSDomain.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSPTRRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSManager.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSClient.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::Node.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::VirtualIP.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetwork.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetworkClient.delete()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::fakes::FakeManager.delete()'],['../classpyrax_1_1manager_1_1BaseManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::manager::BaseManager.delete()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessage.delete()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessageManager.delete()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::resource::BaseResource.delete()']]],
+ ['delete',['delete',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScalePolicy.delete()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScaleWebhook.delete()'],['../classpyrax_1_1client_1_1BaseClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::client::BaseClient.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseDatabase.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseUser.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSDomain.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSPTRRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSManager.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSClient.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::Node.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::VirtualIP.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetwork.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetworkClient.delete()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::fakes::FakeManager.delete()'],['../classpyrax_1_1manager_1_1BaseManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::manager::BaseManager.delete()'],['../classpyrax_1_1object__storage_1_1Container.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::Container.delete()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::ContainerManager.delete()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::StorageObjectManager.delete()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::StorageClient.delete()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessage.delete()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessageManager.delete()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::resource::BaseResource.delete()']]],
['delete_5faccess_5flist',['delete_access_list',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_access_list()']]],
['delete_5faccess_5flist_5fitems',['delete_access_list_items',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_access_list_items()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_access_list_items()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_access_list_items()']]],
+ ['delete_5faccount_5fmetadata',['delete_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#af721d43465741e7f33f3cd931c94b50a',1,'pyrax::object_storage::ContainerManager.delete_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af721d43465741e7f33f3cd931c94b50a',1,'pyrax::object_storage::StorageClient.delete_account_metadata()']]],
['delete_5falarm',['delete_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorEntity.delete_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.delete_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete_alarm()']]],
- ['delete_5fall_5fobjects',['delete_all_objects',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::cf_wrapper::container::Container']]],
+ ['delete_5fall_5fobjects',['delete_all_objects',['../classpyrax_1_1object__storage_1_1Container.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::object_storage::Container.delete_all_objects()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::object_storage::StorageObjectManager.delete_all_objects()']]],
['delete_5fall_5fsnapshots',['delete_all_snapshots',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#aec8a47767c07e19ef3ad9f6b974240bb',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume']]],
['delete_5fbackup',['delete_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a75e968bbf5e6ff6c377c3bf0f8f56694',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
['delete_5fby_5fids',['delete_by_ids',['../classpyrax_1_1queueing_1_1Queue.html#ab3f3c42b68d285259934117c1a8f65e5',1,'pyrax::queueing::Queue.delete_by_ids()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab3f3c42b68d285259934117c1a8f65e5',1,'pyrax::queueing::QueueMessageManager.delete_by_ids()']]],
['delete_5fcheck',['delete_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorEntity.delete_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.delete_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete_check()']]],
['delete_5fconnection_5fthrottle',['delete_connection_throttle',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_connection_throttle()']]],
- ['delete_5fcontainer',['delete_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac314b663a2e0552b6403f04558be2735',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['delete_5fcontainer',['delete_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#a38db6ddfc569a4750ff9cf368df4b3eb',1,'pyrax::object_storage::StorageClient']]],
+ ['delete_5fcontainer_5fmetadata',['delete_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#a0d4266c18da5bcf412fe82044591b343',1,'pyrax::object_storage::StorageClient']]],
['delete_5fdatabase',['delete_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a55a252283f51314fe80a1f74f4ebf46f',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a55a252283f51314fe80a1f74f4ebf46f',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_database()']]],
['delete_5fentity',['delete_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4f0f541b858158a007e2eca4daa25445',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['delete_5fhealth_5fmonitor',['delete_health_monitor',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_health_monitor()']]],
['delete_5fimage_5fmember',['delete_image_member',['../classpyrax_1_1image_1_1ImageClient.html#af01ef62eab3600aa457db708008dad7e',1,'pyrax::image::ImageClient']]],
['delete_5fimage_5ftag',['delete_image_tag',['../classpyrax_1_1image_1_1ImageClient.html#a7c0e66950648c6a8d4fdbe87c0e354c2',1,'pyrax::image::ImageClient']]],
- ['delete_5fin_5fseconds',['delete_in_seconds',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a4c205bc29b6fdece30a5bf28e85dfd3f',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
+ ['delete_5fin_5fseconds',['delete_in_seconds',['../classpyrax_1_1object__storage_1_1StorageObject.html#a4c205bc29b6fdece30a5bf28e85dfd3f',1,'pyrax::object_storage::StorageObject']]],
['delete_5fmember',['delete_member',['../classpyrax_1_1image_1_1Image.html#aa4c98888249447ae65259f24d75b35bc',1,'pyrax::image::Image']]],
['delete_5fmessage',['delete_message',['../classpyrax_1_1queueing_1_1Queue.html#acff825cd612230881431faa0b8f1ba64',1,'pyrax::queueing::Queue.delete_message()'],['../classpyrax_1_1queueing_1_1QueueClient.html#acff825cd612230881431faa0b8f1ba64',1,'pyrax::queueing::QueueClient.delete_message()']]],
['delete_5fmessages_5fby_5fids',['delete_messages_by_ids',['../classpyrax_1_1queueing_1_1QueueClient.html#abaed1d07238dbd332c4609a83ea8dbff',1,'pyrax::queueing::QueueClient']]],
- ['delete_5fmetadata',['delete_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::Node.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata()']]],
+ ['delete_5fmetadata',['delete_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::Node.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::object_storage::ContainerManager.delete_metadata()']]],
['delete_5fmetadata_5ffor_5fnode',['delete_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a38317481667772b2f3483f5360bbb08f',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a38317481667772b2f3483f5360bbb08f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata_for_node()']]],
['delete_5fnode',['delete_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_node()']]],
['delete_5fnotification',['delete_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1507022684013e59d9279645071071d4',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['delete_5fnotification_5fplan',['delete_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#abdd5616e58c4673c7887f6650cee075c',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['delete_5fobject',['delete_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::cf_wrapper::client::CFClient.delete_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::cf_wrapper::container::Container.delete_object()']]],
- ['delete_5fobject_5fin_5fseconds',['delete_object_in_seconds',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::cf_wrapper::client::CFClient.delete_object_in_seconds()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::cf_wrapper::container::Container.delete_object_in_seconds()']]],
+ ['delete_5fobject',['delete_object',['../classpyrax_1_1object__storage_1_1Container.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::Container.delete_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::ContainerManager.delete_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::StorageClient.delete_object()']]],
+ ['delete_5fobject_5fin_5fseconds',['delete_object_in_seconds',['../classpyrax_1_1object__storage_1_1Container.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::Container.delete_object_in_seconds()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::ContainerManager.delete_object_in_seconds()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::StorageClient.delete_object_in_seconds()']]],
['delete_5fpolicy',['delete_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::ScalingGroup.delete_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::ScalingGroupManager.delete_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::AutoScaleClient.delete_policy()']]],
['delete_5fptr_5frecords',['delete_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#acc7bb619a838e10967e3555ec3d02bf8',1,'pyrax::clouddns::CloudDNSManager.delete_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#acc7bb619a838e10967e3555ec3d02bf8',1,'pyrax::clouddns::CloudDNSClient.delete_ptr_records()']]],
['delete_5frecord',['delete_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSDomain.delete_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSManager.delete_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSClient.delete_record()']]],
@@ -73,8 +75,8 @@ var searchData=
['domainresultsiterator',['DomainResultsIterator',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html',1,'pyrax::clouddns']]],
['domainupdatefailed',['DomainUpdateFailed',['../classpyrax_1_1exceptions_1_1DomainUpdateFailed.html',1,'pyrax::exceptions']]],
['dotdict',['DotDict',['../classpyrax_1_1utils_1_1DotDict.html',1,'pyrax::utils']]],
- ['download',['download',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['download_5fobject',['download_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::cf_wrapper::client::CFClient.download_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::cf_wrapper::container::Container.download_object()']]],
+ ['download',['download',['../classpyrax_1_1object__storage_1_1Container.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::Container.download()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::StorageObject.download()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::StorageObjectManager.download()']]],
+ ['download_5fobject',['download_object',['../classpyrax_1_1object__storage_1_1Container.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::Container.download_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::ContainerManager.download_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::StorageClient.download_object()']]],
['duplicatequeue',['DuplicateQueue',['../classpyrax_1_1exceptions_1_1DuplicateQueue.html',1,'pyrax::exceptions']]],
['duplicateuser',['DuplicateUser',['../classpyrax_1_1exceptions_1_1DuplicateUser.html',1,'pyrax::exceptions']]]
];
diff --git a/docs/html/search/all_65.js b/docs/html/search/all_65.js
index 5c98a4c0..c4c05560 100644
--- a/docs/html/search/all_65.js
+++ b/docs/html/search/all_65.js
@@ -1,22 +1,19 @@
var searchData=
[
- ['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::cf_wrapper::client']]],
+ ['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1object__storage.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::object_storage']]],
['enable_5froot_5fuser',['enable_root_user',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a9c5207c3983e465d9880d89e890d8bfc',1,'pyrax::clouddatabases::CloudDatabaseInstance.enable_root_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a9c5207c3983e465d9880d89e890d8bfc',1,'pyrax::clouddatabases::CloudDatabaseClient.enable_root_user()']]],
['endpoint',['Endpoint',['../classpyrax_1_1base__identity_1_1Endpoint.html',1,'pyrax::base_identity']]],
['endpoint_5ftype',['endpoint_type',['../classpyrax_1_1client_1_1BaseClient.html#a3bd93a44d4f767d114caabe620f7e772',1,'pyrax::client::BaseClient']]],
['endpointnotdefined',['EndpointNotDefined',['../classpyrax_1_1exceptions_1_1EndpointNotDefined.html',1,'pyrax::exceptions']]],
['endpointnotfound',['EndpointNotFound',['../classpyrax_1_1exceptions_1_1EndpointNotFound.html',1,'pyrax::exceptions']]],
['endpoints',['endpoints',['../classpyrax_1_1base__identity_1_1Service.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::base_identity::Service.endpoints()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::exceptions::AmbiguousEndpoints::endpoints()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::fakes::FakeIdentityService.endpoints()']]],
- ['ensure_5fcdn',['ensure_cdn',['../namespacepyrax_1_1cf__wrapper_1_1client.html#ac4b8c34dc2906a3e5f7a79ab765d4b59',1,'pyrax::cf_wrapper::client']]],
['entity',['entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a6e49c9e0d2b310e885a8c8f6ebc155e6',1,'pyrax::cloudmonitoring::CloudMonitorCheck::entity()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a6e49c9e0d2b310e885a8c8f6ebc155e6',1,'pyrax::cloudmonitoring::CloudMonitorAlarm::entity()']]],
['env',['env',['../namespacepyrax_1_1utils.html#a9790d3a239a8e290bffbeef17c48f017',1,'pyrax::utils']]],
['env_5fdct',['env_dct',['../classpyrax_1_1Settings.html#af10cee202a039548ef1872a4ebfcbaa4',1,'pyrax::Settings']]],
['environment',['environment',['../classpyrax_1_1Settings.html#a33eefe2a73aa14ff1eaa54c293ab382d',1,'pyrax::Settings']]],
['environmentnotfound',['EnvironmentNotFound',['../classpyrax_1_1exceptions_1_1EnvironmentNotFound.html',1,'pyrax::exceptions']]],
['environments',['environments',['../classpyrax_1_1Settings.html#a989dd2f2e43c5e8b53cfd5933054c2ea',1,'pyrax::Settings']]],
- ['etag',['etag',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a1ee78e6280ae4527b4257099cfb8c330',1,'pyrax::cf_wrapper::storage_object::StorageObject.etag()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a1ee78e6280ae4527b4257099cfb8c330',1,'pyrax::fakes::FakeStorageObject.etag()']]],
- ['etag_5ffail_5fpat',['etag_fail_pat',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a73ecac0c29c1866713f3d26ca05f986c',1,'pyrax::cf_wrapper::client']]],
- ['etag_5ffailed_5fpattern',['etag_failed_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a2902c02c2870c84af5ee318ad3bd548f',1,'pyrax::cf_wrapper::client']]],
+ ['etag',['etag',['../classpyrax_1_1object__storage_1_1StorageObject.html#aebd2535adaefe60dbda5cf11f4d7905c',1,'pyrax::object_storage::StorageObject']]],
['example_5furi',['example_uri',['../namespacepyrax_1_1fakes.html#ab35e755b4978ff39e6935549372faa0a',1,'pyrax::fakes']]],
['exceptions_2epy',['exceptions.py',['../exceptions_8py.html',1,'']]],
['execute',['execute',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ad4a3a293739ba23e084f19c685303590',1,'pyrax::autoscale::AutoScalePolicy']]],
@@ -25,5 +22,5 @@ var searchData=
['export',['export',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a7aff5c605f882c9bad6df59ef505bb5b',1,'pyrax::clouddns::CloudDNSDomain']]],
['export_5fdomain',['export_domain',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a0e037c749fa4bb12133e5986c410d7b4',1,'pyrax::clouddns::CloudDNSManager.export_domain()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a0e037c749fa4bb12133e5986c410d7b4',1,'pyrax::clouddns::CloudDNSClient.export_domain()']]],
['export_5ftask',['export_task',['../classpyrax_1_1image_1_1ImageClient.html#a930a257e1debae07d3a4aeac562ec290',1,'pyrax::image::ImageClient']]],
- ['extra_5fargs',['extra_args',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::ResultsIterator.extra_args()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::SubdomainResultsIterator.extra_args()']]]
+ ['extra_5fargs',['extra_args',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::ResultsIterator.extra_args()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::SubdomainResultsIterator.extra_args()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::utils::ResultsIterator.extra_args()']]]
];
diff --git a/docs/html/search/all_66.js b/docs/html/search/all_66.js
index 779a1679..c3741d2e 100644
--- a/docs/html/search/all_66.js
+++ b/docs/html/search/all_66.js
@@ -26,6 +26,7 @@ var searchData=
['fakecloudnetwork',['FakeCloudNetwork',['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html',1,'pyrax::fakes']]],
['fakecloudnetworkclient',['FakeCloudNetworkClient',['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html',1,'pyrax::fakes']]],
['fakecontainer',['FakeContainer',['../classpyrax_1_1fakes_1_1FakeContainer.html',1,'pyrax::fakes']]],
+ ['fakecontainermanager',['FakeContainerManager',['../classpyrax_1_1fakes_1_1FakeContainerManager.html',1,'pyrax::fakes']]],
['fakecsclient',['FakeCSClient',['../classpyrax_1_1fakes_1_1FakeCSClient.html',1,'pyrax::fakes']]],
['fakedatabaseclient',['FakeDatabaseClient',['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html',1,'pyrax::fakes']]],
['fakedatabaseinstance',['FakeDatabaseInstance',['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html',1,'pyrax::fakes']]],
@@ -50,6 +51,7 @@ var searchData=
['fakeimagemanager',['FakeImageManager',['../classpyrax_1_1fakes_1_1FakeImageManager.html',1,'pyrax::fakes']]],
['fakeimagemembermanager',['FakeImageMemberManager',['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html',1,'pyrax::fakes']]],
['fakeimagetagmanager',['FakeImageTagManager',['../classpyrax_1_1fakes_1_1FakeImageTagManager.html',1,'pyrax::fakes']]],
+ ['fakeiterator',['FakeIterator',['../classpyrax_1_1fakes_1_1FakeIterator.html',1,'pyrax::fakes']]],
['fakekeyring',['FakeKeyring',['../classpyrax_1_1fakes_1_1FakeKeyring.html',1,'pyrax::fakes']]],
['fakeloadbalancer',['FakeLoadBalancer',['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html',1,'pyrax::fakes']]],
['fakeloadbalancerclient',['FakeLoadBalancerClient',['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html',1,'pyrax::fakes']]],
@@ -69,17 +71,20 @@ var searchData=
['fakeserver',['FakeServer',['../classpyrax_1_1fakes_1_1FakeServer.html',1,'pyrax::fakes']]],
['fakeservice',['FakeService',['../classpyrax_1_1fakes_1_1FakeService.html',1,'pyrax::fakes']]],
['fakestatuschanger',['FakeStatusChanger',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html',1,'pyrax::fakes']]],
+ ['fakestorageclient',['FakeStorageClient',['../classpyrax_1_1fakes_1_1FakeStorageClient.html',1,'pyrax::fakes']]],
['fakestorageobject',['FakeStorageObject',['../classpyrax_1_1fakes_1_1FakeStorageObject.html',1,'pyrax::fakes']]],
+ ['fakestorageobjectmanager',['FakeStorageObjectManager',['../classpyrax_1_1fakes_1_1FakeStorageObjectManager.html',1,'pyrax::fakes']]],
['fakevirtualip',['FakeVirtualIP',['../classpyrax_1_1fakes_1_1FakeVirtualIP.html',1,'pyrax::fakes']]],
- ['fault',['FAULT',['../namespacepyrax_1_1cf__wrapper_1_1container.html#a892f51831156b6ea326c363e4b10631a',1,'pyrax::cf_wrapper::container']]],
- ['fault',['Fault',['../classpyrax_1_1cf__wrapper_1_1container_1_1Fault.html',1,'pyrax::cf_wrapper::container']]],
- ['fetch',['fetch',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a271dcd2cab08dc966228cd3d12e7cfb7',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['fetch_5fdlo',['fetch_dlo',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaef0d2bdb7e63ca8f1f0c619cad80253',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['fetch_5fobject',['fetch_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::cf_wrapper::client::CFClient.fetch_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::cf_wrapper::container::Container.fetch_object()']]],
- ['fetch_5fpartial',['fetch_partial',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['fault',['FAULT',['../namespacepyrax_1_1object__storage.html#a892f51831156b6ea326c363e4b10631a',1,'pyrax::object_storage']]],
+ ['fault_5fcls',['Fault_cls',['../classpyrax_1_1object__storage_1_1Fault__cls.html',1,'pyrax::object_storage']]],
+ ['fetch',['fetch',['../classpyrax_1_1object__storage_1_1StorageObject.html#a271dcd2cab08dc966228cd3d12e7cfb7',1,'pyrax::object_storage::StorageObject.fetch()'],['../classpyrax_1_1object__storage_1_1Container.html#a50ff2dfa5d3a485eae28edf1160744aa',1,'pyrax::object_storage::Container.fetch()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a50ff2dfa5d3a485eae28edf1160744aa',1,'pyrax::object_storage::StorageObjectManager.fetch()']]],
+ ['fetch_5fcdn_5fdata',['fetch_cdn_data',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ae312f7b1026f9df20f49e335768b6bcf',1,'pyrax::object_storage::ContainerManager']]],
+ ['fetch_5fdlo',['fetch_dlo',['../classpyrax_1_1object__storage_1_1StorageClient.html#aaef0d2bdb7e63ca8f1f0c619cad80253',1,'pyrax::object_storage::StorageClient']]],
+ ['fetch_5fobject',['fetch_object',['../classpyrax_1_1object__storage_1_1Container.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::Container.fetch_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::ContainerManager.fetch_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::StorageClient.fetch_object()']]],
+ ['fetch_5fpartial',['fetch_partial',['../classpyrax_1_1object__storage_1_1Container.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::Container.fetch_partial()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::ContainerManager.fetch_partial()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::StorageObjectManager.fetch_partial()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::StorageClient.fetch_partial()']]],
['field_5fnames',['field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#a0b9c1a726225d02b85a31d2fc7508352',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]],
['filenotfound',['FileNotFound',['../classpyrax_1_1exceptions_1_1FileNotFound.html',1,'pyrax::exceptions']]],
- ['find',['find',['../classpyrax_1_1client_1_1BaseClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::client::BaseClient.find()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::cloudmonitoring::CloudMonitorClient.find()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::fakes::FakeManager.find()'],['../classpyrax_1_1manager_1_1BaseManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::manager::BaseManager.find()']]],
+ ['find',['find',['../classpyrax_1_1client_1_1BaseClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::client::BaseClient.find()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::cloudmonitoring::CloudMonitorClient.find()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::fakes::FakeManager.find()'],['../classpyrax_1_1manager_1_1BaseManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::manager::BaseManager.find()'],['../classpyrax_1_1object__storage_1_1Container.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::object_storage::Container.find()']]],
['find_5fall_5fchecks',['find_all_checks',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a85522a4725d32d0924f3196f59f91d92',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.find_all_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a85522a4725d32d0924f3196f59f91d92',1,'pyrax::cloudmonitoring::CloudMonitorClient.find_all_checks()']]],
['find_5fnetwork_5fby_5flabel',['find_network_by_label',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab9a076a96d8be6ef848669c841c472f7',1,'pyrax::cloudnetworks::CloudNetworkClient']]],
['find_5fnetwork_5fby_5fname',['find_network_by_name',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#aa2a5394d949e4dbc374a082fe3c16d84',1,'pyrax::cloudnetworks::CloudNetworkClient']]],
@@ -87,16 +92,16 @@ var searchData=
['find_5fuser_5fby_5femail',['find_user_by_email',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a7b76b7abe1a446c07c41572021183d78',1,'pyrax::base_identity::BaseIdentity.find_user_by_email()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a7b76b7abe1a446c07c41572021183d78',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_email()']]],
['find_5fuser_5fby_5fid',['find_user_by_id',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::base_identity::BaseIdentity.find_user_by_id()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_id()']]],
['find_5fuser_5fby_5fname',['find_user_by_name',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::base_identity::BaseIdentity.find_user_by_name()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_name()']]],
- ['findall',['findall',['../classpyrax_1_1client_1_1BaseClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::client::BaseClient.findall()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::clouddns::CloudDNSManager.findall()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::cloudmonitoring::CloudMonitorClient.findall()'],['../classpyrax_1_1manager_1_1BaseManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::manager::BaseManager.findall()']]],
+ ['findall',['findall',['../classpyrax_1_1client_1_1BaseClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::client::BaseClient.findall()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::clouddns::CloudDNSManager.findall()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::cloudmonitoring::CloudMonitorClient.findall()'],['../classpyrax_1_1manager_1_1BaseManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::manager::BaseManager.findall()'],['../classpyrax_1_1object__storage_1_1Container.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::object_storage::Container.findall()']]],
['flavor',['flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a0e211f0b0d4eacb53ffb5f68e4e8dd01',1,'pyrax::clouddatabases::CloudDatabaseInstance']]],
['flavornotfound',['FlavorNotFound',['../classpyrax_1_1exceptions_1_1FlavorNotFound.html',1,'pyrax::exceptions']]],
['flavors',['flavors',['../classpyrax_1_1fakes_1_1FakeCSClient.html#ae18dec9cd12ee32dd9ea0f5c8aabfcae',1,'pyrax::fakes::FakeCSClient']]],
['fnames',['fnames',['../namespacepyrax_1_1identity.html#a6cac12681a298a3f33aefe5d9a6044ea',1,'pyrax::identity']]],
- ['folder_5fname_5ffrom_5fpath',['folder_name_from_path',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ac467e83660d484cbbad5626094c00dcd',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['folder_5fname_5ffrom_5fpath',['folder_name_from_path',['../classpyrax_1_1object__storage_1_1FolderUploader.html#ac467e83660d484cbbad5626094c00dcd',1,'pyrax::object_storage::FolderUploader']]],
['folder_5fsize',['folder_size',['../namespacepyrax_1_1utils.html#a44e6cd242f9d12705e157706a6caddfe',1,'pyrax::utils']]],
- ['folder_5fupload_5fstatus',['folder_upload_status',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa27847dbcb2f79be04aaabd5b85291e6',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['folder_5fupload_5fstatus',['folder_upload_status',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa27847dbcb2f79be04aaabd5b85291e6',1,'pyrax::object_storage::StorageClient']]],
['foldernotfound',['FolderNotFound',['../classpyrax_1_1exceptions_1_1FolderNotFound.html',1,'pyrax::exceptions']]],
- ['folderuploader',['FolderUploader',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html',1,'pyrax::cf_wrapper::client']]],
+ ['folderuploader',['FolderUploader',['../classpyrax_1_1object__storage_1_1FolderUploader.html',1,'pyrax::object_storage']]],
['forbidden',['Forbidden',['../classpyrax_1_1exceptions_1_1Forbidden.html',1,'pyrax::exceptions']]],
['fpath',['fpath',['../namespacepyrax_1_1identity.html#a709dee3638ba4186d2985e17f10f8b0a',1,'pyrax::identity']]],
['from_5fresponse',['from_response',['../namespacepyrax_1_1exceptions.html#a6ec044b1084ca1566f5a0e9555c63998',1,'pyrax::exceptions']]]
diff --git a/docs/html/search/all_67.js b/docs/html/search/all_67.js
index 7574f8e6..10010526 100644
--- a/docs/html/search/all_67.js
+++ b/docs/html/search/all_67.js
@@ -1,16 +1,21 @@
var searchData=
[
- ['gen',['gen',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a295392d2c1465863e97d36dfd19a4b97',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get',['get',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9c57eef25270a48365249a68581a1247',1,'pyrax::cf_wrapper::client::CFClient.get()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a9c57eef25270a48365249a68581a1247',1,'pyrax::cf_wrapper::container::Container.get()'],['../classpyrax_1_1Settings.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::Settings.get()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScalePolicy.get()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScaleWebhook.get()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::base_identity::Endpoint.get()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cf_wrapper::storage_object::StorageObject.get()'],['../classpyrax_1_1client_1_1BaseClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::client::BaseClient.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseVolume.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseManager.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseInstance.get()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddns::CloudDNSRecord.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorClient.get()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudnetworks::CloudNetwork.get()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeResponse.get()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeManager.get()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeEntity.get()'],['../classpyrax_1_1manager_1_1BaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::manager::BaseManager.get()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::queueing::QueueManager.get()'],['../classpyrax_1_1resource_1_1BaseResource.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::resource::BaseResource.get()']]],
+ ['gen',['gen',['../classpyrax_1_1object__storage_1_1StorageClient.html#a295392d2c1465863e97d36dfd19a4b97',1,'pyrax::object_storage::StorageClient']]],
+ ['get',['get',['../classpyrax_1_1Settings.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::Settings.get()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScalePolicy.get()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScaleWebhook.get()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::base_identity::Endpoint.get()'],['../classpyrax_1_1client_1_1BaseClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::client::BaseClient.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseVolume.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseManager.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseInstance.get()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddns::CloudDNSRecord.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorClient.get()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudnetworks::CloudNetwork.get()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeResponse.get()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeManager.get()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeEntity.get()'],['../classpyrax_1_1manager_1_1BaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::manager::BaseManager.get()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::ContainerManager.get()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageObject.get()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageObjectManager.get()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageClient.get()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::queueing::QueueManager.get()'],['../classpyrax_1_1resource_1_1BaseResource.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::resource::BaseResource.get()']]],
['get_5fabsolute_5flimits',['get_absolute_limits',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#af5584781384edbc4caa037fbc9749092',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5faccess_5flist',['get_access_list',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_access_list()']]],
['get_5faccount',['get_account',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4d751385e14b90deacafe71308ee04dc',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['get_5faccount_5fmetadata',['get_account_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5faccount_5fdetails',['get_account_details',['../classpyrax_1_1object__storage_1_1StorageClient.html#a92e1f4d9ea3b9f1a4173a0c3cbb4b63f',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5faccount_5fheaders',['get_account_headers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#add5b3b9f6a80ebc276eefb5174977918',1,'pyrax::object_storage::ContainerManager']]],
+ ['get_5faccount_5finfo',['get_account_info',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae62cc3fbbe26d05e400f35268955c6ec',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5faccount_5fmetadata',['get_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::object_storage::ContainerManager.get_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::object_storage::StorageClient.get_account_metadata()']]],
['get_5falarm',['get_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorEntity.get_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_alarm()']]],
['get_5falgorithms',['get_algorithms',['../classpyrax_1_1fakes_1_1FakeService.html#a7945b394e6d2f570edf593cbe2b6b4e2',1,'pyrax::fakes::FakeService']]],
- ['get_5fall_5fcontainers',['get_all_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa476a035f5fbe5e4aeb41337529d0740',1,'pyrax::cf_wrapper::client::CFClient.get_all_containers()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ae413c04282e2a1f584d7b99bbea09b54',1,'pyrax::cf_wrapper::client::CFClient.get_all_containers']]],
+ ['get_5fall_5fcontainers',['get_all_containers',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa476a035f5fbe5e4aeb41337529d0740',1,'pyrax::object_storage::StorageClient']]],
['get_5faudits',['get_audits',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ad18caa6ffb1e5081c9aa71d04a434ce6',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fbackup',['get_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a3a01f4e15e08d87606f2886455804879',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
+ ['get_5fcdn_5flog_5fretention',['get_cdn_log_retention',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a032dd6e08a1efb86d8f15bae01756e14',1,'pyrax::object_storage::ContainerManager.get_cdn_log_retention()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a032dd6e08a1efb86d8f15bae01756e14',1,'pyrax::object_storage::StorageClient.get_cdn_log_retention()']]],
+ ['get_5fcdn_5fmetadata',['get_cdn_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ad0b56aada104ce5c6e468708ba820dad',1,'pyrax::object_storage::ContainerManager']]],
['get_5fchangelogs',['get_changelogs',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a51cc4e0d1e3af50c4375eecd08e128dd',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fcheck',['get_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a663e1c9857cbc0bf083314e6404e976f',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a663e1c9857cbc0bf083314e6404e976f',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_check()']]],
['get_5fcheck_5ftype',['get_check_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4ec84467f00cf7b6b321984347025d14',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
@@ -20,17 +25,17 @@ var searchData=
['get_5fconfiguration',['get_configuration',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::ScalingGroup.get_configuration()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::ScalingGroupManager.get_configuration()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::AutoScaleClient.get_configuration()']]],
['get_5fconnection_5flogging',['get_connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab259705d7fd79cee133de68e9b29846b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_connection_logging()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab259705d7fd79cee133de68e9b29846b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_connection_logging()']]],
['get_5fconnection_5fthrottle',['get_connection_throttle',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_connection_throttle()']]],
- ['get_5fcontainer',['get_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ade2af720b771c722f092076b29a0ef64',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fcdn_5fmetadata',['get_container_cdn_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aadba5878ace4bb8b6bb12584bd9d488e',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fios_5furi',['get_container_ios_uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fmetadata',['get_container_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af3f2bf8377401391d0fed1403d7ce1e1',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fobject_5fnames',['get_container_object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6104ca24badc598cb4f2e17f20cc7e07',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fobjects',['get_container_objects',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaf73308b26a79abf34f31686698ce8fc',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fstreaming_5furi',['get_container_streaming_uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a70834113917360c15a621ab652501c83',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5fcontainer',['get_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#a2f69128249aa724dc31c0e7fefd8e220',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fcdn_5fmetadata',['get_container_cdn_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#aadba5878ace4bb8b6bb12584bd9d488e',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fios_5furi',['get_container_ios_uri',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::object_storage::ContainerManager.get_container_ios_uri()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::object_storage::StorageClient.get_container_ios_uri()']]],
+ ['get_5fcontainer_5fmetadata',['get_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#af3f2bf8377401391d0fed1403d7ce1e1',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fobject_5fnames',['get_container_object_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#a26f3b7cd70d00ef79f4d9c9456e7ac47',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fobjects',['get_container_objects',['../classpyrax_1_1object__storage_1_1StorageClient.html#a23fde2bdc4232270dfc2928cc3e41203',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fstreaming_5furi',['get_container_streaming_uri',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a70834113917360c15a621ab652501c83',1,'pyrax::object_storage::ContainerManager.get_container_streaming_uri()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a70834113917360c15a621ab652501c83',1,'pyrax::object_storage::StorageClient.get_container_streaming_uri()']]],
['get_5fcontent_5fcaching',['get_content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a81bd711b5a3cfb2976088a62c9adc6e0',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_content_caching()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a81bd711b5a3cfb2976088a62c9adc6e0',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_content_caching()']]],
['get_5fdatabase',['get_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a88023cfc83e7c3c6343e1b37f1fb7f4f',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a88023cfc83e7c3c6343e1b37f1fb7f4f',1,'pyrax::clouddatabases::CloudDatabaseClient.get_database()']]],
['get_5fdefault_5fregion',['get_default_region',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aa48069d87e240c6f35caed1b76e8cb4e',1,'pyrax::base_identity::BaseIdentity']]],
- ['get_5fdetails',['GET_DETAILS',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a19c3271e3266881464ec6c4cd9366810',1,'pyrax::clouddns::CloudDNSRecord::GET_DETAILS()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseDatabase::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseUser::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseFlavor.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseFlavor::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackup.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseBackup::get_details()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::resource::BaseResource.get_details()']]],
+ ['get_5fdetails',['get_details',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseDatabase::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseUser::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseFlavor.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseFlavor::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackup.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseBackup::get_details()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::resource::BaseResource.get_details()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a19c3271e3266881464ec6c4cd9366810',1,'pyrax::clouddns::CloudDNSRecord::GET_DETAILS()']]],
['get_5fdevice',['get_device',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#aab56944ec3d6d817943ee557024ac816',1,'pyrax::cloudloadbalancers::Node']]],
['get_5fdomain_5fiterator',['get_domain_iterator',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a603939fc833c990994af7e8cfaad5eda',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5fencoding',['get_encoding',['../namespacepyrax.html#a449ca982d93692884375caa2d609b3b0',1,'pyrax']]],
@@ -38,7 +43,9 @@ var searchData=
['get_5fenvironment',['get_environment',['../namespacepyrax.html#a9850c29c666aa2f53d8ba560897855f8',1,'pyrax']]],
['get_5ferror_5fpage',['get_error_page',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_error_page()']]],
['get_5fextensions',['get_extensions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseIdentity']]],
+ ['get_5ffile_5fsize',['get_file_size',['../namespacepyrax_1_1object__storage.html#aa4c3e8f88a31bd0198ef93717b8446b5',1,'pyrax::object_storage']]],
['get_5fflavor',['get_flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5ef10110fd842db8ecae2798b08bdd5b',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
+ ['get_5fheaders',['get_headers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#aa3b7b8c653e87ceb81b5c42518ef70a1',1,'pyrax::object_storage::ContainerManager']]],
['get_5fhealth_5fmonitor',['get_health_monitor',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_health_monitor()']]],
['get_5fhome_5fdocument',['get_home_document',['../classpyrax_1_1queueing_1_1QueueClient.html#a97fc2eb61171be491fb16708763edf2c',1,'pyrax::queueing::QueueClient']]],
['get_5fhttp_5fdebug',['get_http_debug',['../namespacepyrax.html#a2766ee16854adf9575c29ac661f447fd',1,'pyrax']]],
@@ -50,12 +57,12 @@ var searchData=
['get_5fimage_5ftask_5fschema',['get_image_task_schema',['../classpyrax_1_1image_1_1ImageClient.html#aad7b95a357c65cfef55b2239b5218c1e',1,'pyrax::image::ImageClient']]],
['get_5fimage_5ftasks_5fschema',['get_image_tasks_schema',['../classpyrax_1_1image_1_1ImageClient.html#a4b69d6b1d1f498049686b1a9c8edd6e2',1,'pyrax::image::ImageClient']]],
['get_5fimages_5fschema',['get_images_schema',['../classpyrax_1_1image_1_1ImageClient.html#a58ba7c3876964cb379d308c3f7f96606',1,'pyrax::image::ImageClient']]],
- ['get_5finfo',['get_info',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a384aea54f97656a3742b60bae861bc34',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5finfo',['get_info',['../classpyrax_1_1object__storage_1_1StorageClient.html#a38dec823de00a197d6b68448409433bc',1,'pyrax::object_storage::StorageClient']]],
['get_5flaunch_5fconfig',['get_launch_config',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::ScalingGroup.get_launch_config()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::ScalingGroupManager.get_launch_config()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::AutoScaleClient.get_launch_config()']]],
['get_5flimits',['get_limits',['../classpyrax_1_1client_1_1BaseClient.html#ab5ef84a0682afc9a357f6e76b15f1640',1,'pyrax::client::BaseClient.get_limits()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ab5ef84a0682afc9a357f6e76b15f1640',1,'pyrax::clouddatabases::CloudDatabaseClient.get_limits()']]],
['get_5fmember',['get_member',['../classpyrax_1_1image_1_1Image.html#ac120fa8b5717fbd7a6b77c489294a8ea',1,'pyrax::image::Image']]],
['get_5fmessage',['get_message',['../classpyrax_1_1queueing_1_1Queue.html#a56468e8bf0910ac8be0def8886f1feae',1,'pyrax::queueing::Queue.get_message()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a56468e8bf0910ac8be0def8886f1feae',1,'pyrax::queueing::QueueClient.get_message()']]],
- ['get_5fmetadata',['get_metadata',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cf_wrapper::container::Container.get_metadata()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cf_wrapper::storage_object::StorageObject.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::Node.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueClient.get_metadata()']]],
+ ['get_5fmetadata',['get_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::Node.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata()'],['../classpyrax_1_1object__storage_1_1Container.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::Container.get_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::ContainerManager.get_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::StorageObject.get_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::StorageObjectManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueClient.get_metadata()']]],
['get_5fmetadata_5ffor_5fnode',['get_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#aebfb9c2caec7532153b2558fe14347cf',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aebfb9c2caec7532153b2558fe14347cf',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata_for_node()']]],
['get_5fmetric_5fdata_5fpoints',['get_metric_data_points',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorEntity.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_metric_data_points()']]],
['get_5fmonitoring_5fzone',['get_monitoring_zone',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a264e06827aca6792c0bb9342703b90f6',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
@@ -64,10 +71,10 @@ var searchData=
['get_5fnotification',['get_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bb5691ae7d569885d7ccfda53ccf269',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fnotification_5fplan',['get_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4cacea89acad7d3a81d2c454b7898918',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fnotification_5ftype',['get_notification_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a26c32a682d8efbdfd220d8bd9847b35c',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['get_5fobject',['get_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::cf_wrapper::client::CFClient.get_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::cf_wrapper::container::Container.get_object()']]],
- ['get_5fobject_5fmetadata',['get_object_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fobject_5fnames',['get_object_names',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a1ffef9ff929707223146f6c5373e2a14',1,'pyrax::cf_wrapper::container::Container']]],
- ['get_5fobjects',['get_objects',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ace264467ad390fd60316148647ce727d',1,'pyrax::cf_wrapper::container::Container']]],
+ ['get_5fobject',['get_object',['../classpyrax_1_1object__storage_1_1Container.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::Container.get_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::ContainerManager.get_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::StorageClient.get_object()']]],
+ ['get_5fobject_5fmetadata',['get_object_metadata',['../classpyrax_1_1object__storage_1_1Container.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::Container.get_object_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::ContainerManager.get_object_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::StorageClient.get_object_metadata()']]],
+ ['get_5fobject_5fnames',['get_object_names',['../classpyrax_1_1object__storage_1_1Container.html#af31bc087b14353da54461044cea601de',1,'pyrax::object_storage::Container']]],
+ ['get_5fobjects',['get_objects',['../classpyrax_1_1object__storage_1_1Container.html#a0f75050d56e08824919f67b013ba7ab6',1,'pyrax::object_storage::Container']]],
['get_5foverview',['get_overview',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a795c88c7d05f125834f1b18a1cb3bcae',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fpassword',['get_password',['../classpyrax_1_1fakes_1_1FakeKeyring.html#a48a79cc5ff03eeb62e93ea1a1e6cf3c2',1,'pyrax::fakes::FakeKeyring']]],
['get_5fpng_5fcontent',['get_png_content',['../namespacepyrax_1_1fakes.html#acd6c70ae08c49befef3454e39deadf89',1,'pyrax::fakes']]],
@@ -83,17 +90,17 @@ var searchData=
['get_5fsnapshot',['get_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a10f46ed85249ae2f94a60635077c8f58',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['get_5fssl_5ftermination',['get_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_ssl_termination()']]],
['get_5fstate',['get_state',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::ScalingGroup.get_state()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::ScalingGroupManager.get_state()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::AutoScaleClient.get_state()']]],
- ['get_5fstats',['get_stats',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueClient.get_stats()']]],
+ ['get_5fstats',['get_stats',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_stats()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueClient.get_stats()']]],
['get_5fsubdomain_5fiterator',['get_subdomain_iterator',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ac532463e7fb1cbb0a17181a816460adc',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5ftask',['get_task',['../classpyrax_1_1image_1_1ImageClient.html#afee695a4e20aed685a098809a699f5ea',1,'pyrax::image::ImageClient']]],
- ['get_5ftemp_5furl',['get_temp_url',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::client::CFClient.get_temp_url()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::container::Container.get_temp_url()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::storage_object::StorageObject.get_temp_url()']]],
- ['get_5ftemp_5furl_5fkey',['get_temp_url_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a80f3fd33724985de91d7930036344668',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5ftemp_5furl',['get_temp_url',['../classpyrax_1_1object__storage_1_1Container.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::Container.get_temp_url()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::ContainerManager.get_temp_url()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::StorageObject.get_temp_url()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::StorageClient.get_temp_url()']]],
+ ['get_5ftemp_5furl_5fkey',['get_temp_url_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a80f3fd33724985de91d7930036344668',1,'pyrax::object_storage::StorageClient']]],
['get_5ftenant',['get_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a5032718366de2e9b6b60077fdf882ce7',1,'pyrax::base_identity::BaseIdentity']]],
['get_5ftimings',['get_timings',['../classpyrax_1_1client_1_1BaseClient.html#ac6afa2de729057e4864e897292b3f9cb',1,'pyrax::client::BaseClient']]],
['get_5ftoken',['get_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::base_identity::BaseIdentity.get_token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::fakes::FakeIdentity.get_token()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::service_catalog::ServiceCatalog.get_token()']]],
['get_5ftoken_5fendpoints',['get_token_endpoints',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aeab174eb893dbbd0e84bfa5101e9e9a1',1,'pyrax::base_identity::BaseIdentity']]],
['get_5ftype',['get_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a0ef321a485de87e39ea78ebd3ba31b23',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager']]],
- ['get_5fuploaded',['get_uploaded',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a537487e2f2dabc8103e2006739cbeb0e',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5fuploaded',['get_uploaded',['../classpyrax_1_1object__storage_1_1StorageClient.html#a537487e2f2dabc8103e2006739cbeb0e',1,'pyrax::object_storage::StorageClient']]],
['get_5fusage',['get_usage',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_usage()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_usage()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_usage()'],['../classpyrax_1_1fakes_1_1FakeService.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::fakes::FakeService.get_usage()']]],
['get_5fuser',['get_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::base_identity::BaseIdentity.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseClient.get_user()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::identity::rax_identity::RaxIdentity.get_user()']]],
['get_5fwebhook',['get_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::ScalingGroupManager.get_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::AutoScalePolicy.get_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::AutoScaleClient.get_webhook()']]],
diff --git a/docs/html/search/all_68.js b/docs/html/search/all_68.js
index 481c618d..444446f1 100644
--- a/docs/html/search/all_68.js
+++ b/docs/html/search/all_68.js
@@ -1,16 +1,15 @@
var searchData=
[
- ['handle_5fswiftclient_5fexception',['handle_swiftclient_exception',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aed48921b20ac7d5d1bf17dae8e2f971d',1,'pyrax::cf_wrapper::client']]],
+ ['hash',['hash',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a28b5828ac3b16e22c26077eedf5674ff',1,'pyrax::fakes::FakeStorageObject']]],
['head',['head',['../classpyrax_1_1manager_1_1BaseManager.html#a6ffb8c9775dd06f2a95c5be870862051',1,'pyrax::manager::BaseManager']]],
- ['head_5fdate_5fformat',['HEAD_DATE_FORMAT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aea95a0010e586f71e6587a111cae730c',1,'pyrax::cf_wrapper::client']]],
['headers',['headers',['../classpyrax_1_1fakes_1_1FakeResponse.html#af6b6ac953f8f4b50f71fb020972f410b',1,'pyrax::fakes::FakeResponse']]],
['host',['host',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a832ddc04754e8a43d4f3c6165b1294a7',1,'pyrax::clouddatabases::CloudDatabaseUser']]],
['href',['href',['../classpyrax_1_1queueing_1_1QueueMessage.html#aecfca4286e302d5d945be6fe76b99c86',1,'pyrax::queueing::QueueMessage.href()'],['../classpyrax_1_1queueing_1_1QueueClaim.html#ab8d8e60d0ff1588f6381ad0bef8ad4b7',1,'pyrax::queueing::QueueClaim.href()']]],
['http_2epy',['http.py',['../http_8py.html',1,'']]],
- ['http_5flog_5fdebug',['http_log_debug',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseIdentity.http_log_debug()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::cf_wrapper::client::CFClient.http_log_debug()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::cf_wrapper::client::Connection::http_log_debug()'],['../classpyrax_1_1client_1_1BaseClient.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::client::BaseClient.http_log_debug()']]],
+ ['http_5flog_5fdebug',['http_log_debug',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseIdentity.http_log_debug()'],['../classpyrax_1_1client_1_1BaseClient.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::client::BaseClient.http_log_debug()']]],
['http_5flog_5freq',['http_log_req',['../namespacepyrax_1_1http.html#aff71c1b3b5d2f16e608995f526e4d531',1,'pyrax::http']]],
['http_5flog_5fresp',['http_log_resp',['../namespacepyrax_1_1http.html#ad5a5ea82cd563be6d489571f5b79ecb2',1,'pyrax::http']]],
['http_5fstatus',['http_status',['../classpyrax_1_1exceptions_1_1BadRequest.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::BadRequest::http_status()'],['../classpyrax_1_1exceptions_1_1Unauthorized.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::Unauthorized::http_status()'],['../classpyrax_1_1exceptions_1_1Forbidden.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::Forbidden::http_status()'],['../classpyrax_1_1exceptions_1_1NotFound.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::NotFound::http_status()'],['../classpyrax_1_1exceptions_1_1NoUniqueMatch.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::NoUniqueMatch::http_status()'],['../classpyrax_1_1exceptions_1_1OverLimit.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::OverLimit::http_status()'],['../classpyrax_1_1exceptions_1_1HTTPNotImplemented.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::HTTPNotImplemented::http_status()']]],
['httpnotimplemented',['HTTPNotImplemented',['../classpyrax_1_1exceptions_1_1HTTPNotImplemented.html',1,'pyrax::exceptions']]],
- ['human_5fid',['human_id',['../classpyrax_1_1resource_1_1BaseResource.html#a386641658f158d35fbe6af4c8e0d128a',1,'pyrax::resource::BaseResource.human_id'],['../classpyrax_1_1resource_1_1BaseResource.html#a494d50825f5dfc848a56d8a568c16172',1,'pyrax::resource::BaseResource::HUMAN_ID()']]]
+ ['human_5fid',['HUMAN_ID',['../classpyrax_1_1resource_1_1BaseResource.html#a494d50825f5dfc848a56d8a568c16172',1,'pyrax::resource::BaseResource::HUMAN_ID()'],['../classpyrax_1_1resource_1_1BaseResource.html#a386641658f158d35fbe6af4c8e0d128a',1,'pyrax::resource::BaseResource.human_id']]]
];
diff --git a/docs/html/search/all_69.js b/docs/html/search/all_69.js
index 884fa24e..be814ad0 100644
--- a/docs/html/search/all_69.js
+++ b/docs/html/search/all_69.js
@@ -1,9 +1,9 @@
var searchData=
[
- ['id',['id',['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::clouddns::CloudDNSPTRRecord.id()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::Node.id()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::VirtualIP.id()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudnetworks::CloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeServer.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeServer::id()'],['../classpyrax_1_1fakes_1_1FakeService.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeService.id()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeEntity::id()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDatabaseInstance::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageVolume::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageSnapshot::id()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeLoadBalancer::id()'],['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeStatusChanger.id()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDomain::id()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDevice::id()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScalePolicy::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScaleWebhook::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroupManager::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroup.id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorEntity::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorCheck::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorNotification::id()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeQueueManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageMemberManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageTagManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageManager.id()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueMessage::id()'],['../classpyrax_1_1queueing_1_1QueueClaim.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueClaim::id()'],['../classpyrax_1_1resource_1_1BaseResource.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::resource::BaseResource::id()'],['../classpyrax_1_1image_1_1ImageMember.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::image::ImageMember.id()'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id']]],
+ ['id',['id',['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::clouddns::CloudDNSPTRRecord.id()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::Node.id()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::VirtualIP.id()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudnetworks::CloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeServer.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeServer::id()'],['../classpyrax_1_1fakes_1_1FakeService.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeService.id()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeEntity::id()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDatabaseInstance::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageVolume::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageSnapshot::id()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeLoadBalancer::id()'],['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeStatusChanger.id()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDomain::id()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDevice::id()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScalePolicy::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScaleWebhook::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroupManager::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroup.id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorEntity::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorCheck::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorNotification::id()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeQueueManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageMemberManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageTagManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageManager.id()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueMessage::id()'],['../classpyrax_1_1queueing_1_1QueueClaim.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueClaim::id()'],['../classpyrax_1_1resource_1_1BaseResource.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::resource::BaseResource::id()'],['../classpyrax_1_1image_1_1ImageMember.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::image::ImageMember.id()'],['../classpyrax_1_1object__storage_1_1Container.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::object_storage::Container.id()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::object_storage::StorageObject.id()'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id']]],
['identity',['identity',['../classpyrax_1_1base__identity_1_1Service.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::base_identity::Service::identity()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::base_identity::Endpoint.identity()'],['../classpyrax_1_1client_1_1BaseClient.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::client::BaseClient.identity()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::fakes::FakeClient::identity()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::fakes::FakeIdentityService::identity()'],['../namespacepyrax.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax.identity()']]],
['identityclassnotdefined',['IdentityClassNotDefined',['../classpyrax_1_1exceptions_1_1IdentityClassNotDefined.html',1,'pyrax::exceptions']]],
- ['ignore',['ignore',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a0e575fb50e8e0cc27c24104a3ced5a5c',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['ignore',['ignore',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a0e575fb50e8e0cc27c24104a3ced5a5c',1,'pyrax::object_storage::FolderUploader']]],
['image',['Image',['../classpyrax_1_1image_1_1Image.html',1,'pyrax::image']]],
['image',['image',['../classpyrax_1_1image_1_1JSONSchemaManager.html#a158190a19ec0f4a9517b4193ccd7a645',1,'pyrax::image::JSONSchemaManager']]],
['image_2epy',['image.py',['../image_8py.html',1,'']]],
@@ -27,7 +27,7 @@ var searchData=
['install_5frequires',['install_requires',['../namespacesetup.html#af13461461c50ae271e468b6b20d1f831',1,'setup']]],
['instance',['instance',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a5ffaf17e178b3a6fa2012fe3050ede22',1,'pyrax::clouddatabases::CloudDatabaseVolume::instance()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#a5ffaf17e178b3a6fa2012fe3050ede22',1,'pyrax::fakes::FakeDatabaseVolume::instance()']]],
['internalservererror',['InternalServerError',['../classpyrax_1_1exceptions_1_1InternalServerError.html',1,'pyrax::exceptions']]],
- ['interval',['interval',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::cf_wrapper::client::CFClient.interval()'],['../classpyrax_1_1utils_1_1__WaitThread.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::utils::_WaitThread.interval()']]],
+ ['interval',['interval',['../classpyrax_1_1object__storage_1_1StorageClient.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::object_storage::StorageClient.interval()'],['../classpyrax_1_1utils_1_1__WaitThread.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::utils::_WaitThread.interval()']]],
['invalidcdnmetadata',['InvalidCDNMetadata',['../classpyrax_1_1exceptions_1_1InvalidCDNMetadata.html',1,'pyrax::exceptions']]],
['invalidconfigurationfile',['InvalidConfigurationFile',['../classpyrax_1_1exceptions_1_1InvalidConfigurationFile.html',1,'pyrax::exceptions']]],
['invalidcredentialfile',['InvalidCredentialFile',['../classpyrax_1_1exceptions_1_1InvalidCredentialFile.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_6c.js b/docs/html/search/all_6c.js
index bed2051b..3a17b251 100644
--- a/docs/html/search/all_6c.js
+++ b/docs/html/search/all_6c.js
@@ -1,24 +1,24 @@
var searchData=
[
['label',['label',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a22f45a3cb4f074e609f58ebaeef0ecf9',1,'pyrax::cloudnetworks::CloudNetwork']]],
- ['last_5fmodified',['last_modified',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::cf_wrapper::storage_object::StorageObject.last_modified()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::fakes::FakeStorageObject.last_modified()']]],
- ['list',['list',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a6bbb80367a84ef6bc36dcf82df1fea55',1,'pyrax::cf_wrapper::container::Container.list()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cf_wrapper::client::CFClient.list()'],['../classpyrax_1_1client_1_1BaseClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::client::BaseClient.list()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackupManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddatabases::CloudDatabaseBackupManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSClient.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorChangelogManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorChangelogManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorOverviewManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorOverviewManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeManager.list()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeEntity.list()'],['../classpyrax_1_1image_1_1ImageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageManager.list()'],['../classpyrax_1_1image_1_1ImageClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageClient.list()'],['../classpyrax_1_1manager_1_1BaseManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::manager::BaseManager.list()'],['../classpyrax_1_1queueing_1_1Queue.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::Queue.list()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::QueueMessageManager.list()']]],
+ ['last_5fmodified',['last_modified',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::fakes::FakeStorageObject']]],
+ ['limit',['limit',['../classpyrax_1_1utils_1_1ResultsIterator.html#a6e8e21280adfab4d1a5b4275b3aea590',1,'pyrax::utils::ResultsIterator']]],
+ ['list',['list',['../classpyrax_1_1client_1_1BaseClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::client::BaseClient.list()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackupManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddatabases::CloudDatabaseBackupManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSClient.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorChangelogManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorChangelogManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorOverviewManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorOverviewManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeManager.list()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeEntity.list()'],['../classpyrax_1_1image_1_1ImageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageManager.list()'],['../classpyrax_1_1image_1_1ImageClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageClient.list()'],['../classpyrax_1_1manager_1_1BaseManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::manager::BaseManager.list()'],['../classpyrax_1_1object__storage_1_1Container.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::object_storage::Container.list()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::object_storage::StorageObjectManager.list()'],['../classpyrax_1_1queueing_1_1Queue.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::Queue.list()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::QueueMessageManager.list()']]],
['list_5falarms',['list_alarms',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorEntity.list_alarms()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.list_alarms()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorClient.list_alarms()']]],
- ['list_5fall',['list_all',['../classpyrax_1_1image_1_1ImageManager.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageManager.list_all()'],['../classpyrax_1_1image_1_1ImageClient.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageClient.list_all()']]],
+ ['list_5fall',['list_all',['../classpyrax_1_1image_1_1ImageManager.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageManager.list_all()'],['../classpyrax_1_1image_1_1ImageClient.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageClient.list_all()'],['../classpyrax_1_1object__storage_1_1Container.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::object_storage::Container.list_all()']]],
['list_5fbackups',['list_backups',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseManager.list_backups()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_backups()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseClient.list_backups()']]],
['list_5fby_5fclaim',['list_by_claim',['../classpyrax_1_1queueing_1_1Queue.html#ac7bd1cb861452925a16e74d9b6aafd43',1,'pyrax::queueing::Queue']]],
['list_5fby_5fids',['list_by_ids',['../classpyrax_1_1queueing_1_1Queue.html#ae6ec4aa7bb7da740187a3039da271f47',1,'pyrax::queueing::Queue.list_by_ids()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ae6ec4aa7bb7da740187a3039da271f47',1,'pyrax::queueing::QueueMessageManager.list_by_ids()']]],
['list_5fcheck_5ftypes',['list_check_types',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a360142ff4cbb495a8e5ba41b9c810a8b',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fchecks',['list_checks',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorEntity.list_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.list_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list_checks()']]],
- ['list_5fcontainer_5fnames',['list_container_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6cf761a9f573f933217359cc9d212ede',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainer_5fobject_5fnames',['list_container_object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a11a9aacdd8d2a50682a39b737e74db4d',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainer_5fobjects',['list_container_objects',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7d0081438a3cfaa2e36059525659f0f9',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainer_5fsubdirs',['list_container_subdirs',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a67a23cb99d99eb7027e487e506cf68f6',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainers',['list_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a43f33f69f2026d24a426ce6f6cdc11f9',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainers_5finfo',['list_containers_info',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['list_5fcontainer_5fnames',['list_container_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#ab8c492737b62608beef73a96049d41c3',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fobject_5fnames',['list_container_object_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac5bb09c888b0a2c33adf2d893dce292d',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fobjects',['list_container_objects',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5b8161bbcbb76c6cfd393df6214c63c6',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fsubdirs',['list_container_subdirs',['../classpyrax_1_1object__storage_1_1StorageClient.html#a67a23cb99d99eb7027e487e506cf68f6',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainers',['list_containers',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5b04a9306161e21c7f6409f993c095d8',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainers_5finfo',['list_containers_info',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::object_storage::ContainerManager.list_containers_info()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::object_storage::StorageClient.list_containers_info()']]],
['list_5fcredentials',['list_credentials',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a752ff9d933b98fdeb87b51a7409f6d4a',1,'pyrax::base_identity::BaseIdentity']]],
['list_5fdatabases',['list_databases',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ae180be633edf68a4a6599e8c64310c5f',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_databases()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ae180be633edf68a4a6599e8c64310c5f',1,'pyrax::clouddatabases::CloudDatabaseClient.list_databases()']]],
- ['list_5fdate_5fformat',['LIST_DATE_FORMAT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#abd01608caf4565408309af08113eb2b0',1,'pyrax::cf_wrapper::client']]],
['list_5fentities',['list_entities',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a03cd18f945d37d5cb1e0dc666b23ed3a',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fenvironments',['list_environments',['../namespacepyrax.html#aaf4742684739d9a72d01f13093dc9a87',1,'pyrax']]],
['list_5fflavors',['list_flavors',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ad54dc84b9febeac129b211c63c636612',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
@@ -27,25 +27,26 @@ var searchData=
['list_5fmessages',['list_messages',['../classpyrax_1_1queueing_1_1QueueClient.html#a2c448aaaca6c6858cb03494cef06f331',1,'pyrax::queueing::QueueClient']]],
['list_5fmessages_5fby_5fclaim',['list_messages_by_claim',['../classpyrax_1_1queueing_1_1QueueClient.html#a67f1debfc0fcbb482b300f1eef48e31b',1,'pyrax::queueing::QueueClient']]],
['list_5fmessages_5fby_5fids',['list_messages_by_ids',['../classpyrax_1_1queueing_1_1QueueClient.html#a0b7095bcaf881caa8bbe5b123a94982a',1,'pyrax::queueing::QueueClient']]],
- ['list_5fmethod',['list_method',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::DomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::SubdomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::RecordResultsIterator::list_method()']]],
+ ['list_5fmethod',['list_method',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::DomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::SubdomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::RecordResultsIterator::list_method()'],['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::object_storage::StorageObjectIterator::list_method()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::utils::ResultsIterator.list_method()']]],
['list_5fmetrics',['list_metrics',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#af232f5b9467cd7214f217a3fe6d51473',1,'pyrax::cloudmonitoring::CloudMonitorEntity.list_metrics()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#af232f5b9467cd7214f217a3fe6d51473',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.list_metrics()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#af232f5b9467cd7214f217a3fe6d51473',1,'pyrax::cloudmonitoring::CloudMonitorCheck.list_metrics()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#af232f5b9467cd7214f217a3fe6d51473',1,'pyrax::cloudmonitoring::CloudMonitorClient.list_metrics()']]],
['list_5fmonitoring_5fzones',['list_monitoring_zones',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aa4b0e32f41ba11a5cd20dd43a9fc7c66',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fnext_5fpage',['list_next_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#acc587f3fc63273a1236d635f463edb91',1,'pyrax::clouddns::CloudDNSManager.list_next_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#acc587f3fc63273a1236d635f463edb91',1,'pyrax::clouddns::CloudDNSClient.list_next_page()']]],
['list_5fnotification_5fplans',['list_notification_plans',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab92b8049f19f558a86a40457f9834d5e',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fnotification_5ftypes',['list_notification_types',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#adafe19263bf8b2cd365c36b887911fdb',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fnotifications',['list_notifications',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab41b40cc23d232c8f4839759ae7fb69f',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['list_5fobject_5fnames',['list_object_names',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ac15021a03873cdafa474dc19af1114f8',1,'pyrax::cf_wrapper::container::Container']]],
+ ['list_5fobject_5fnames',['list_object_names',['../classpyrax_1_1object__storage_1_1Container.html#a49ab4f3aa93742019d4ec773d709e750',1,'pyrax::object_storage::Container.list_object_names()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a49ab4f3aa93742019d4ec773d709e750',1,'pyrax::object_storage::ContainerManager.list_object_names()']]],
+ ['list_5fobjects',['list_objects',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a50ad99b37507a84058d8ca95e01b964c',1,'pyrax::object_storage::ContainerManager']]],
['list_5fpolicies',['list_policies',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::ScalingGroup.list_policies()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::ScalingGroupManager.list_policies()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::AutoScaleClient.list_policies()']]],
['list_5fprevious_5fpage',['list_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#aa4b6fcc0a8d9e480ddda1300e9e44322',1,'pyrax::clouddns::CloudDNSManager.list_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#aa4b6fcc0a8d9e480ddda1300e9e44322',1,'pyrax::clouddns::CloudDNSClient.list_previous_page()']]],
['list_5fptr_5frecords',['list_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a50a310b1ef2863a2e7090f31782a67cc',1,'pyrax::clouddns::CloudDNSManager.list_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a50a310b1ef2863a2e7090f31782a67cc',1,'pyrax::clouddns::CloudDNSClient.list_ptr_records()']]],
- ['list_5fpublic_5fcontainers',['list_public_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['list_5fpublic_5fcontainers',['list_public_containers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::object_storage::ContainerManager.list_public_containers()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::object_storage::StorageClient.list_public_containers()']]],
['list_5frecords',['list_records',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSDomain.list_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSManager.list_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSClient.list_records()']]],
['list_5frecords_5fnext_5fpage',['list_records_next_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9433b9835b889f167ade546f6d545de7',1,'pyrax::clouddns::CloudDNSManager.list_records_next_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9433b9835b889f167ade546f6d545de7',1,'pyrax::clouddns::CloudDNSClient.list_records_next_page()']]],
['list_5frecords_5fprevious_5fpage',['list_records_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a4864d421a328bb3bff21e312046fe96f',1,'pyrax::clouddns::CloudDNSManager.list_records_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a4864d421a328bb3bff21e312046fe96f',1,'pyrax::clouddns::CloudDNSClient.list_records_previous_page()']]],
['list_5froles',['list_roles',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a07d99fc2a1f4be72dc4ff0860bfbc7d3',1,'pyrax::base_identity::BaseIdentity']]],
['list_5froles_5ffor_5fuser',['list_roles_for_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aea771492a5203856177387a1d626fc8b',1,'pyrax::base_identity::BaseIdentity']]],
['list_5fsnapshots',['list_snapshots',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.list_snapshots()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.list_snapshots()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.list_snapshots()']]],
- ['list_5fsubdirs',['list_subdirs',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::cf_wrapper::container::Container']]],
+ ['list_5fsubdirs',['list_subdirs',['../classpyrax_1_1object__storage_1_1Container.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::object_storage::Container.list_subdirs()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::object_storage::ContainerManager.list_subdirs()']]],
['list_5fsubdomains',['list_subdomains',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSDomain.list_subdomains()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSManager.list_subdomains()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSClient.list_subdomains()']]],
['list_5fsubdomains_5fnext_5fpage',['list_subdomains_next_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a4cffcbdbfac87c7985652d22759effcf',1,'pyrax::clouddns::CloudDNSManager.list_subdomains_next_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a4cffcbdbfac87c7985652d22759effcf',1,'pyrax::clouddns::CloudDNSClient.list_subdomains_next_page()']]],
['list_5fsubdomains_5fprevious_5fpage',['list_subdomains_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a809ef53848e0cee67182feb9fdf64a18',1,'pyrax::clouddns::CloudDNSManager.list_subdomains_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a809ef53848e0cee67182feb9fdf64a18',1,'pyrax::clouddns::CloudDNSClient.list_subdomains_previous_page()']]],
diff --git a/docs/html/search/all_6d.js b/docs/html/search/all_6d.js
index 46a023c5..e5fc3917 100644
--- a/docs/html/search/all_6d.js
+++ b/docs/html/search/all_6d.js
@@ -1,22 +1,24 @@
var searchData=
[
- ['make_5fcontainer_5fprivate',['make_container_private',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac914c041451eac23012b690573972119',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['make_5fcontainer_5fpublic',['make_container_public',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a76f191980ae586a885256c95f681b3c5',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['make_5fprivate',['make_private',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::cf_wrapper::container::Container']]],
- ['make_5fpublic',['make_public',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::cf_wrapper::container::Container']]],
+ ['make_5fcontainer_5fprivate',['make_container_private',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac914c041451eac23012b690573972119',1,'pyrax::object_storage::StorageClient']]],
+ ['make_5fcontainer_5fpublic',['make_container_public',['../classpyrax_1_1object__storage_1_1StorageClient.html#a76f191980ae586a885256c95f681b3c5',1,'pyrax::object_storage::StorageClient']]],
+ ['make_5fprivate',['make_private',['../classpyrax_1_1object__storage_1_1Container.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::object_storage::Container.make_private()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::object_storage::ContainerManager.make_private()']]],
+ ['make_5fpublic',['make_public',['../classpyrax_1_1object__storage_1_1Container.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::object_storage::Container.make_public()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::object_storage::ContainerManager.make_public()']]],
['management_5furl',['management_url',['../classpyrax_1_1client_1_1BaseClient.html#a0e7003a466834b21ae00b9640955da9f',1,'pyrax::client::BaseClient']]],
- ['manager',['manager',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::clouddns::ResultsIterator::manager()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDatabaseInstance.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageVolume.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageSnapshot.manager()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeLoadBalancer.manager()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDNSDomain.manager()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeScalingGroup.manager()'],['../classpyrax_1_1resource_1_1BaseResource.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::resource::BaseResource.manager()']]],
+ ['manager',['manager',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::clouddns::ResultsIterator::manager()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeStorageObject::manager()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDatabaseInstance.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageVolume.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageSnapshot.manager()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeLoadBalancer.manager()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDNSDomain.manager()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeScalingGroup.manager()'],['../classpyrax_1_1resource_1_1BaseResource.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::resource::BaseResource.manager()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::utils::ResultsIterator::manager()']]],
['manager_2epy',['manager.py',['../manager_8py.html',1,'']]],
+ ['marker',['marker',['../classpyrax_1_1utils_1_1ResultsIterator.html#a13369eabab3d7ad2773a340258a8fc43',1,'pyrax::utils::ResultsIterator']]],
+ ['marker_5fatt',['marker_att',['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html#a3bd4bab533dbaa67307e4c19f5d8051a',1,'pyrax::object_storage::StorageObjectIterator.marker_att()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a3bd4bab533dbaa67307e4c19f5d8051a',1,'pyrax::utils::ResultsIterator.marker_att()']]],
['marker_5fpat',['marker_pat',['../namespacepyrax_1_1queueing.html#a4ee1e020cf80b7e79c3f93360c95c811',1,'pyrax::queueing']]],
['match_5fpattern',['match_pattern',['../namespacepyrax_1_1utils.html#ab32790e8c29f35cd0c810dd86dedba2c',1,'pyrax::utils']]],
- ['max_5fbulk_5fdelete',['MAX_BULK_DELETE',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a427058bc05da2dd18ad05697b19dd420',1,'pyrax::cf_wrapper::client']]],
['max_5fentities',['max_entities',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a68ed3a21e0314dc3b7d6e1ac6db90d',1,'pyrax::autoscale::ScalingGroup.max_entities'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a68ed3a21e0314dc3b7d6e1ac6db90d',1,'pyrax::autoscale::ScalingGroup.max_entities']]],
- ['max_5ffile_5fsize',['max_file_size',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a38c5b8bfe2405c63c56e3dec85a057bc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['max_5ffile_5fsize',['MAX_FILE_SIZE',['../namespacepyrax_1_1object__storage.html#aca54fca798cd98366d9792a054d11096',1,'pyrax::object_storage']]],
['max_5fsize',['MAX_SIZE',['../namespacepyrax_1_1cloudblockstorage.html#a395b0fb68a5628e06819cb4aa43631fe',1,'pyrax::cloudblockstorage']]],
['message',['message',['../classpyrax_1_1exceptions_1_1ClientException.html#ab8140947611504abcb64a4c277effcf5',1,'pyrax::exceptions::ClientException.message()'],['../classpyrax_1_1exceptions_1_1BadRequest.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::BadRequest.message()'],['../classpyrax_1_1exceptions_1_1Unauthorized.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::Unauthorized.message()'],['../classpyrax_1_1exceptions_1_1Forbidden.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::Forbidden.message()'],['../classpyrax_1_1exceptions_1_1NotFound.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::NotFound.message()'],['../classpyrax_1_1exceptions_1_1NoUniqueMatch.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::NoUniqueMatch.message()'],['../classpyrax_1_1exceptions_1_1OverLimit.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::OverLimit.message()'],['../classpyrax_1_1exceptions_1_1HTTPNotImplemented.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::HTTPNotImplemented.message()']]],
['messages',['messages',['../classpyrax_1_1queueing_1_1QueueClaim.html#a7048605d09bb21159ccaab63402dc4e5',1,'pyrax::queueing::QueueClaim']]],
['metadata',['metadata',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2fe8c1ec91a77ed22c86049d4ffef3f4',1,'pyrax::autoscale::ScalingGroup.metadata'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2fe8c1ec91a77ed22c86049d4ffef3f4',1,'pyrax::autoscale::ScalingGroup.metadata']]],
['method_5fdelete',['method_delete',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1132703a22def73f131d037165a971aa',1,'pyrax::base_identity::BaseIdentity.method_delete()'],['../classpyrax_1_1client_1_1BaseClient.html#a1132703a22def73f131d037165a971aa',1,'pyrax::client::BaseClient.method_delete()']]],
+ ['method_5fdict',['method_dict',['../classpyrax_1_1object__storage_1_1StorageClient.html#ad86c8bc27d283d04ce67b7acc0163d54',1,'pyrax::object_storage::StorageClient']]],
['method_5fget',['method_get',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac1f6b6211af6452ff038fbb8a25f4822',1,'pyrax::base_identity::BaseIdentity.method_get()'],['../classpyrax_1_1client_1_1BaseClient.html#ac1f6b6211af6452ff038fbb8a25f4822',1,'pyrax::client::BaseClient.method_get()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ac1f6b6211af6452ff038fbb8a25f4822',1,'pyrax::clouddns::CloudDNSClient.method_get()']]],
['method_5fhead',['method_head',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::base_identity::BaseIdentity.method_head()'],['../classpyrax_1_1client_1_1BaseClient.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::client::BaseClient.method_head()']]],
['method_5fpatch',['method_patch',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::base_identity::BaseIdentity.method_patch()'],['../classpyrax_1_1client_1_1BaseClient.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::client::BaseClient.method_patch()']]],
@@ -36,7 +38,7 @@ var searchData=
['missingtemporaryurlkey',['MissingTemporaryURLKey',['../classpyrax_1_1exceptions_1_1MissingTemporaryURLKey.html',1,'pyrax::exceptions']]],
['monitoringchecktargetnotspecified',['MonitoringCheckTargetNotSpecified',['../classpyrax_1_1exceptions_1_1MonitoringCheckTargetNotSpecified.html',1,'pyrax::exceptions']]],
['monitoringzonespollmissing',['MonitoringZonesPollMissing',['../classpyrax_1_1exceptions_1_1MonitoringZonesPollMissing.html',1,'pyrax::exceptions']]],
- ['move',['move',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#af348e10e4e4162711ceedc9841276eb4',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['move_5fobject',['move_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::cf_wrapper::client::CFClient.move_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::cf_wrapper::container::Container.move_object()']]],
+ ['move',['move',['../classpyrax_1_1object__storage_1_1StorageObject.html#af348e10e4e4162711ceedc9841276eb4',1,'pyrax::object_storage::StorageObject']]],
+ ['move_5fobject',['move_object',['../classpyrax_1_1object__storage_1_1Container.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::Container.move_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::ContainerManager.move_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::StorageClient.move_object()']]],
['msg_5flimit',['MSG_LIMIT',['../namespacepyrax_1_1queueing.html#ae9142e29cab13b8a9c7b02ea91ba9695',1,'pyrax::queueing']]]
];
diff --git a/docs/html/search/all_6e.js b/docs/html/search/all_6e.js
index ca9cf5b2..0687451e 100644
--- a/docs/html/search/all_6e.js
+++ b/docs/html/search/all_6e.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['name',['name',['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::autoscale::AutoScaleClient::name()'],['../classpyrax_1_1base__identity_1_1Service.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::base_identity::Service.name()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cf_wrapper::container::Container.name()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cf_wrapper::storage_object::StorageObject.name()'],['../classpyrax_1_1client_1_1BaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::client::BaseClient.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudblockstorage::CloudBlockStorageClient::name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddatabases::CloudDatabaseUser.name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddatabases::CloudDatabaseClient::name()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSPTRRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddns::CloudDNSClient::name()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudmonitoring::CloudMonitorClient::name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetwork.name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetworkClient::name()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeStorageObject.name()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeDNSDomain.name()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeScalingGroup.name()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeIdentityService.name()'],['../classpyrax_1_1image_1_1ImageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::image::ImageClient::name()'],['../classpyrax_1_1queueing_1_1Queue.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::queueing::Queue::name()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::queueing::QueueClient::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempfile::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempDirectory::name()'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorEntity.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorCheck.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorZone.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorZone.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotification.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationType.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationType.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlan.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlan.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.name()'],['../namespacesetup.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'setup.name()']]],
+ ['name',['name',['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::autoscale::AutoScaleClient::name()'],['../classpyrax_1_1base__identity_1_1Service.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::base_identity::Service.name()'],['../classpyrax_1_1client_1_1BaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::client::BaseClient.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudblockstorage::CloudBlockStorageClient::name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddatabases::CloudDatabaseUser.name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddatabases::CloudDatabaseClient::name()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSPTRRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddns::CloudDNSClient::name()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudmonitoring::CloudMonitorClient::name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetwork.name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetworkClient::name()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeStorageObject.name()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeDNSDomain.name()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeScalingGroup.name()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeIdentityService.name()'],['../classpyrax_1_1image_1_1ImageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::image::ImageClient::name()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::object_storage::StorageClient::name()'],['../classpyrax_1_1queueing_1_1Queue.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::queueing::Queue::name()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::queueing::QueueClient::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempfile::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempDirectory::name()'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorEntity.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorCheck.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorZone.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorZone.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotification.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationType.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationType.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlan.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlan.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.name()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::object_storage::StorageObjectManager.name()'],['../namespacesetup.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'setup.name()']]],
['name_5fattr',['NAME_ATTR',['../classpyrax_1_1resource_1_1BaseResource.html#a74fac10a98253f8b0308159a33113ab9',1,'pyrax::resource::BaseResource']]],
['networkcidrinvalid',['NetworkCIDRInvalid',['../classpyrax_1_1exceptions_1_1NetworkCIDRInvalid.html',1,'pyrax::exceptions']]],
['networkcidrmalformed',['NetworkCIDRMalformed',['../classpyrax_1_1exceptions_1_1NetworkCIDRMalformed.html',1,'pyrax::exceptions']]],
@@ -8,13 +8,12 @@ var searchData=
['networkinuse',['NetworkInUse',['../classpyrax_1_1exceptions_1_1NetworkInUse.html',1,'pyrax::exceptions']]],
['networklabelnotunique',['NetworkLabelNotUnique',['../classpyrax_1_1exceptions_1_1NetworkLabelNotUnique.html',1,'pyrax::exceptions']]],
['networknotfound',['NetworkNotFound',['../classpyrax_1_1exceptions_1_1NetworkNotFound.html',1,'pyrax::exceptions']]],
- ['next',['next',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::clouddns::ResultsIterator']]],
- ['next_5furi',['next_uri',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::clouddns::ResultsIterator']]],
- ['no_5fsuch_5fcontainer_5fpattern',['no_such_container_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#ab3150aa95b9e341f9b4c3f11214a9097',1,'pyrax::cf_wrapper::client']]],
- ['no_5fsuch_5fobject_5fpattern',['no_such_object_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a8141ed8d74dd957f7bad8300a7fed3da',1,'pyrax::cf_wrapper::client']]],
+ ['next',['next',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::clouddns::ResultsIterator.next()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::utils::ResultsIterator.next()']]],
+ ['next_5furi',['next_uri',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::clouddns::ResultsIterator.next_uri()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::utils::ResultsIterator.next_uri()']]],
['noclientforservice',['NoClientForService',['../classpyrax_1_1exceptions_1_1NoClientForService.html',1,'pyrax::exceptions']]],
- ['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1Node.html',1,'pyrax::cloudloadbalancers']]],
+ ['nocontentspecified',['NoContentSpecified',['../classpyrax_1_1exceptions_1_1NoContentSpecified.html',1,'pyrax::exceptions']]],
['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aed91756449328e2c454e53e9c5e53936',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::Node()'],['../classpyrax_1_1fakes_1_1FakeService.html#aed91756449328e2c454e53e9c5e53936',1,'pyrax::fakes::FakeService.Node()']]],
+ ['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1Node.html',1,'pyrax::cloudloadbalancers']]],
['noendpointforregion',['NoEndpointForRegion',['../classpyrax_1_1exceptions_1_1NoEndpointForRegion.html',1,'pyrax::exceptions']]],
['noendpointforservice',['NoEndpointForService',['../classpyrax_1_1exceptions_1_1NoEndpointForService.html',1,'pyrax::exceptions']]],
['nomoreresults',['NoMoreResults',['../classpyrax_1_1exceptions_1_1NoMoreResults.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_6f.js b/docs/html/search/all_6f.js
index f2bce414..b6d4dafc 100644
--- a/docs/html/search/all_6f.js
+++ b/docs/html/search/all_6f.js
@@ -1,9 +1,11 @@
var searchData=
[
['obj',['obj',['../classpyrax_1_1utils_1_1__WaitThread.html#a0cf19f82ec7d5b8a220277790b543a0d',1,'pyrax::utils::_WaitThread']]],
- ['object_5fcount',['object_count',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#adf84fc89f9e8786591953166a1fd9d52',1,'pyrax::cf_wrapper::container::Container']]],
- ['object_5fmeta_5fprefix',['object_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a338bd59cd31829ed127f9a1da87e44cb',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['object_5fnames',['object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a29873bda9d6c5d58a9bad90471708093',1,'pyrax::cf_wrapper::client::BulkDeleter']]],
+ ['object_5flisting_5fiterator',['object_listing_iterator',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a72ce5f16b7dbe9364cc8785e6971295d',1,'pyrax::object_storage::ContainerManager.object_listing_iterator()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a72ce5f16b7dbe9364cc8785e6971295d',1,'pyrax::object_storage::StorageClient.object_listing_iterator()']]],
+ ['object_5fmanager',['object_manager',['../classpyrax_1_1fakes_1_1FakeContainer.html#aa8156d802ae30ee808fbac51e1c2ae5d',1,'pyrax::fakes::FakeContainer::object_manager()'],['../classpyrax_1_1object__storage_1_1Container.html#aa8156d802ae30ee808fbac51e1c2ae5d',1,'pyrax::object_storage::Container.object_manager()']]],
+ ['object_5fmeta_5fprefix',['OBJECT_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a2b07ad6d45716d1265a0d20a7dcc4d52',1,'pyrax::object_storage']]],
+ ['object_5fnames',['object_names',['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a29873bda9d6c5d58a9bad90471708093',1,'pyrax::object_storage::BulkDeleter']]],
+ ['object_5fstorage_2epy',['object_storage.py',['../object__storage_8py.html',1,'']]],
['opth',['opth',['../namespacepyrax_1_1identity.html#a67950ac9ebe565380668e902b8b09e8f',1,'pyrax::identity']]],
['optional_5ffield_5fnames',['optional_field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#aa8cda2e75b38e5edd7137e5e3b6a631b',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]],
['overlimit',['OverLimit',['../classpyrax_1_1exceptions_1_1OverLimit.html',1,'pyrax::exceptions']]]
diff --git a/docs/html/search/all_70.js b/docs/html/search/all_70.js
index 72b8e266..debf71cd 100644
--- a/docs/html/search/all_70.js
+++ b/docs/html/search/all_70.js
@@ -2,8 +2,6 @@ var searchData=
[
['autoscale',['autoscale',['../namespacepyrax_1_1autoscale.html',1,'pyrax']]],
['base_5fidentity',['base_identity',['../namespacepyrax_1_1base__identity.html',1,'pyrax']]],
- ['cf_5fwrapper',['cf_wrapper',['../namespacepyrax_1_1cf__wrapper.html',1,'pyrax']]],
- ['client',['client',['../namespacepyrax_1_1cf__wrapper_1_1client.html',1,'pyrax::cf_wrapper']]],
['client',['client',['../namespacepyrax_1_1client.html',1,'pyrax']]],
['cloudblockstorage',['cloudblockstorage',['../namespacepyrax_1_1cloudblockstorage.html',1,'pyrax']]],
['clouddatabases',['clouddatabases',['../namespacepyrax_1_1clouddatabases.html',1,'pyrax']]],
@@ -11,7 +9,6 @@ var searchData=
['cloudloadbalancers',['cloudloadbalancers',['../namespacepyrax_1_1cloudloadbalancers.html',1,'pyrax']]],
['cloudmonitoring',['cloudmonitoring',['../namespacepyrax_1_1cloudmonitoring.html',1,'pyrax']]],
['cloudnetworks',['cloudnetworks',['../namespacepyrax_1_1cloudnetworks.html',1,'pyrax']]],
- ['container',['container',['../namespacepyrax_1_1cf__wrapper_1_1container.html',1,'pyrax::cf_wrapper']]],
['exceptions',['exceptions',['../namespacepyrax_1_1exceptions.html',1,'pyrax']]],
['fakes',['fakes',['../namespacepyrax_1_1fakes.html',1,'pyrax']]],
['http',['http',['../namespacepyrax_1_1http.html',1,'pyrax']]],
@@ -19,6 +16,7 @@ var searchData=
['image',['image',['../namespacepyrax_1_1image.html',1,'pyrax']]],
['keystone_5fidentity',['keystone_identity',['../namespacepyrax_1_1identity_1_1keystone__identity.html',1,'pyrax::identity']]],
['manager',['manager',['../namespacepyrax_1_1manager.html',1,'pyrax']]],
+ ['object_5fstorage',['object_storage',['../namespacepyrax_1_1object__storage.html',1,'pyrax']]],
['packages',['packages',['../namespacesetup.html#af290766b923d1fc3f429da7bc5decf7a',1,'setup']]],
['paging_5fservice',['paging_service',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html#a6c4b0eba2e645f64e873cce185cacd60',1,'pyrax::clouddns::DomainResultsIterator.paging_service()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#a6c4b0eba2e645f64e873cce185cacd60',1,'pyrax::clouddns::SubdomainResultsIterator.paging_service()'],['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html#a6c4b0eba2e645f64e873cce185cacd60',1,'pyrax::clouddns::RecordResultsIterator.paging_service()']]],
['params_5fto_5fdict',['params_to_dict',['../namespacepyrax_1_1utils.html#a9829217a17004ff879dffa75d60842ae',1,'pyrax::utils']]],
@@ -28,7 +26,6 @@ var searchData=
['passwordchangefailed',['PasswordChangeFailed',['../classpyrax_1_1exceptions_1_1PasswordChangeFailed.html',1,'pyrax::exceptions']]],
['path',['path',['../namespacepyrax_1_1identity.html#ae6fc00af7c5b5a7c5f40ce6dc6b47d85',1,'pyrax::identity']]],
['pause',['pause',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::ScalingGroup.pause()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::ScalingGroupManager.pause()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::AutoScaleClient.pause()']]],
- ['plug_5fhole_5fin_5fswiftclient_5fauth',['plug_hole_in_swiftclient_auth',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a94ea8f5263f48d8194254f6e52c9a00a',1,'pyrax::cf_wrapper::client']]],
['plural_5fresponse_5fkey',['plural_response_key',['../classpyrax_1_1fakes_1_1FakeDNSManager.html#a692be54e20855ad7f41d446719f26491',1,'pyrax::fakes::FakeDNSManager.plural_response_key()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#a692be54e20855ad7f41d446719f26491',1,'pyrax::fakes::FakeImageManager::plural_response_key()'],['../classpyrax_1_1manager_1_1BaseManager.html#a692be54e20855ad7f41d446719f26491',1,'pyrax::manager::BaseManager.plural_response_key()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#a692be54e20855ad7f41d446719f26491',1,'pyrax::queueing::QueueMessageManager::plural_response_key()']]],
['policies',['policies',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a20e4bd6dc33dd1f27f9b7eaed505f80e',1,'pyrax::autoscale::ScalingGroup']]],
['policy',['policy',['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ad986b73e9d5f47a623a9b6d773c25e34',1,'pyrax::autoscale::AutoScaleWebhook']]],
@@ -38,7 +35,7 @@ var searchData=
['prefix',['prefix',['../classpyrax_1_1base__identity_1_1Service.html#ace96d70a929a737bb705aa0f539decaa',1,'pyrax::base_identity::Service.prefix()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ace96d70a929a737bb705aa0f539decaa',1,'pyrax::fakes::FakeIdentityService.prefix()']]],
['priority',['priority',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a6a5183df4c54c3e28dc8dc704f2487d5',1,'pyrax::clouddns::CloudDNSRecord']]],
['private_5furl',['private_url',['../classpyrax_1_1base__identity_1_1Endpoint.html#a1e54df6815cad9c3931cf2be1068740a',1,'pyrax::base_identity::Endpoint']]],
- ['processed',['processed',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aff5b44290b180a195768e1e1a947e1dc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['processed',['processed',['../classpyrax_1_1object__storage_1_1StorageClient.html#aff5b44290b180a195768e1e1a947e1dc',1,'pyrax::object_storage::StorageClient']]],
['projectid',['projectid',['../classpyrax_1_1client_1_1BaseClient.html#af6e68e7b4a48c30549646fd3d5ed1aae',1,'pyrax::client::BaseClient']]],
['protocolmismatch',['ProtocolMismatch',['../classpyrax_1_1exceptions_1_1ProtocolMismatch.html',1,'pyrax::exceptions']]],
['protocols',['protocols',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a7ffc66e16cbb4a549e7874dce9d61e6e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient']]],
@@ -48,8 +45,8 @@ var searchData=
['ptrrecordupdatefailed',['PTRRecordUpdateFailed',['../classpyrax_1_1exceptions_1_1PTRRecordUpdateFailed.html',1,'pyrax::exceptions']]],
['public_5fnet_5fid',['PUBLIC_NET_ID',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ad40d8530bc55f06ed9e3c64ddd55b53d',1,'pyrax::cloudnetworks::CloudNetworkClient.PUBLIC_NET_ID()'],['../namespacepyrax_1_1cloudnetworks.html#ab08316ceccd63a9b160cb4b587a3f35d',1,'pyrax::cloudnetworks.PUBLIC_NET_ID()']]],
['public_5furl',['public_url',['../classpyrax_1_1base__identity_1_1Endpoint.html#ad89ac698ae744bcb12725ace4c81d246',1,'pyrax::base_identity::Endpoint']]],
- ['purge',['purge',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['purge_5fcdn_5fobject',['purge_cdn_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['purge',['purge',['../classpyrax_1_1object__storage_1_1StorageObject.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::object_storage::StorageObject.purge()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::object_storage::StorageObjectManager.purge()']]],
+ ['purge_5fcdn_5fobject',['purge_cdn_object',['../classpyrax_1_1object__storage_1_1Container.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::Container.purge_cdn_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::ContainerManager.purge_cdn_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::StorageClient.purge_cdn_object()']]],
['pyfiles',['pyfiles',['../namespacepyrax_1_1identity.html#a9a780698de2669d7e87e1af026aebf2a',1,'pyrax::identity']]],
['pypath',['pypath',['../namespacepyrax_1_1identity.html#a41a87c16270907c740784cfa25d0c46a',1,'pyrax::identity']]],
['pyrax',['pyrax',['../namespacepyrax.html',1,'']]],
@@ -58,7 +55,6 @@ var searchData=
['rax_5fidentity',['rax_identity',['../namespacepyrax_1_1identity_1_1rax__identity.html',1,'pyrax::identity']]],
['resource',['resource',['../namespacepyrax_1_1resource.html',1,'pyrax']]],
['service_5fcatalog',['service_catalog',['../namespacepyrax_1_1service__catalog.html',1,'pyrax']]],
- ['storage_5fobject',['storage_object',['../namespacepyrax_1_1cf__wrapper_1_1storage__object.html',1,'pyrax::cf_wrapper']]],
['utils',['utils',['../namespacepyrax_1_1utils.html',1,'pyrax']]],
['version',['version',['../namespacepyrax_1_1version.html',1,'pyrax']]]
];
diff --git a/docs/html/search/all_72.js b/docs/html/search/all_72.js
index 5849a37b..06dddf1b 100644
--- a/docs/html/search/all_72.js
+++ b/docs/html/search/all_72.js
@@ -13,11 +13,11 @@ var searchData=
['regions',['regions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a4c4786354df7358bf12c3c65069dd8b7',1,'pyrax::base_identity::BaseIdentity.regions()'],['../classpyrax_1_1base__identity_1_1Service.html#ae31aaf8562119e7e06a2812c12b5a5ca',1,'pyrax::base_identity::Service.regions()'],['../namespacepyrax.html#a2b45bebec67926b49ea55f14eb0b8f8e',1,'pyrax.regions()']]],
['release_5fclaim',['release_claim',['../classpyrax_1_1queueing_1_1Queue.html#a72572b2049988d314b2943909f1a3284',1,'pyrax::queueing::Queue.release_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72572b2049988d314b2943909f1a3284',1,'pyrax::queueing::QueueClient.release_claim()']]],
['reload',['reload',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ac5c05266f4f3b5937cefb6a818fc6675',1,'pyrax::autoscale::AutoScalePolicy.reload()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ac5c05266f4f3b5937cefb6a818fc6675',1,'pyrax::autoscale::AutoScaleWebhook.reload()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ac5c05266f4f3b5937cefb6a818fc6675',1,'pyrax::cloudmonitoring::CloudMonitorCheck.reload()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#ac5c05266f4f3b5937cefb6a818fc6675',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.reload()'],['../classpyrax_1_1resource_1_1BaseResource.html#ac5c05266f4f3b5937cefb6a818fc6675',1,'pyrax::resource::BaseResource.reload()']]],
- ['remove_5fcontainer_5ffrom_5fcache',['remove_container_from_cache',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a71217dd504682153d8dbbd8bd84eed56',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['remove_5fcontainer_5fmetadata_5fkey',['remove_container_metadata_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a91fcdf99119a696e0b626957628605bb',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['remove_5ffrom_5fcache',['remove_from_cache',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#adf3d192d83c2f53a96b0bd594c15b84d',1,'pyrax::cf_wrapper::container::Container']]],
- ['remove_5fmetadata_5fkey',['remove_metadata_key',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::cf_wrapper::container::Container.remove_metadata_key()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::cf_wrapper::storage_object::StorageObject.remove_metadata_key()']]],
- ['remove_5fobject_5fmetadata_5fkey',['remove_object_metadata_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac3072e2b9369e7435f660ff89ae85aa5',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['remove_5fcontainer_5ffrom_5fcache',['remove_container_from_cache',['../classpyrax_1_1object__storage_1_1StorageClient.html#a71217dd504682153d8dbbd8bd84eed56',1,'pyrax::object_storage::StorageClient']]],
+ ['remove_5fcontainer_5fmetadata_5fkey',['remove_container_metadata_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a91fcdf99119a696e0b626957628605bb',1,'pyrax::object_storage::StorageClient']]],
+ ['remove_5ffrom_5fcache',['remove_from_cache',['../classpyrax_1_1object__storage_1_1Container.html#adf3d192d83c2f53a96b0bd594c15b84d',1,'pyrax::object_storage::Container']]],
+ ['remove_5fmetadata_5fkey',['remove_metadata_key',['../classpyrax_1_1object__storage_1_1Container.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::Container.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::ContainerManager.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::StorageObject.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::StorageObjectManager.remove_metadata_key()']]],
+ ['remove_5fobject_5fmetadata_5fkey',['remove_object_metadata_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac3072e2b9369e7435f660ff89ae85aa5',1,'pyrax::object_storage::StorageClient']]],
['replace',['replace',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ab285a64f9f3fb8e2efb536e440b34466',1,'pyrax::autoscale::ScalingGroupManager.replace()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ab285a64f9f3fb8e2efb536e440b34466',1,'pyrax::autoscale::AutoScaleClient.replace()']]],
['replace_5flaunch_5fconfig',['replace_launch_config',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a851fe41ce6befc7dd1b0a3f98328bbda',1,'pyrax::autoscale::ScalingGroupManager.replace_launch_config()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a851fe41ce6befc7dd1b0a3f98328bbda',1,'pyrax::autoscale::AutoScaleClient.replace_launch_config()']]],
['replace_5fpolicy',['replace_policy',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a4aea046272a0a459df2cc40ba2ee4d21',1,'pyrax::autoscale::ScalingGroupManager.replace_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a4aea046272a0a459df2cc40ba2ee4d21',1,'pyrax::autoscale::AutoScaleClient.replace_policy()']]],
@@ -37,17 +37,18 @@ var searchData=
['responses',['responses',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#af824c71003de1a6161256ec0fa125810',1,'pyrax::fakes::FakeIdentityResponse']]],
['restart',['restart',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ac035369f12e9417eb1a18896a6888f05',1,'pyrax::clouddatabases::CloudDatabaseInstance.restart()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ac035369f12e9417eb1a18896a6888f05',1,'pyrax::clouddatabases::CloudDatabaseClient.restart()']]],
['restore_5fbackup',['restore_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a5e6eb469a8e9a84757cddf7d4846dda4',1,'pyrax::clouddatabases::CloudDatabaseManager.restore_backup()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5e6eb469a8e9a84757cddf7d4846dda4',1,'pyrax::clouddatabases::CloudDatabaseClient.restore_backup()']]],
- ['results',['results',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::cf_wrapper::client::BulkDeleter.results()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::clouddns::ResultsIterator.results()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::fakes::FakeBulkDeleter::results()']]],
+ ['results',['results',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::clouddns::ResultsIterator.results()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::fakes::FakeBulkDeleter::results()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::object_storage::BulkDeleter.results()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::utils::ResultsIterator.results()']]],
['resultsiterator',['ResultsIterator',['../classpyrax_1_1clouddns_1_1ResultsIterator.html',1,'pyrax::clouddns']]],
+ ['resultsiterator',['ResultsIterator',['../classpyrax_1_1utils_1_1ResultsIterator.html',1,'pyrax::utils']]],
['resume',['resume',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a4a0c86a5f484661cd399a28e4ac1c779',1,'pyrax::autoscale::ScalingGroup.resume()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a4a0c86a5f484661cd399a28e4ac1c779',1,'pyrax::autoscale::ScalingGroupManager.resume()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a4a0c86a5f484661cd399a28e4ac1c779',1,'pyrax::autoscale::AutoScaleClient.resume()']]],
['retry_5finterval',['RETRY_INTERVAL',['../namespacepyrax_1_1cloudblockstorage.html#abc175296d7313060131bf7f6c2932cf4',1,'pyrax::cloudblockstorage']]],
['revoke_5ftoken',['revoke_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a81cbc4feef6ca3cd23376680a86a6c80',1,'pyrax::base_identity::BaseIdentity']]],
['revoke_5fuser_5faccess',['revoke_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseUserManager.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseInstance.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseUser.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseClient.revoke_user_access()']]],
['rfc2822_5fformat',['rfc2822_format',['../namespacepyrax_1_1utils.html#a6ea62353ce94e3d28ad8f6cae3e2ec5f',1,'pyrax::utils']]],
['role',['Role',['../classpyrax_1_1base__identity_1_1Role.html',1,'pyrax::base_identity']]],
- ['root_5ffolder',['root_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a5f0b3f0b57ace7916c26401c56575116',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['root_5ffolder',['root_folder',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a5f0b3f0b57ace7916c26401c56575116',1,'pyrax::object_storage::FolderUploader']]],
['root_5fuser_5fstatus',['root_user_status',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a269cc22e852b374875720085d24b9922',1,'pyrax::clouddatabases::CloudDatabaseInstance.root_user_status()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a269cc22e852b374875720085d24b9922',1,'pyrax::clouddatabases::CloudDatabaseClient.root_user_status()']]],
- ['run',['run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeFolderUploader.run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeBulkDeleter.run()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::cf_wrapper::client::FolderUploader.run()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::cf_wrapper::client::BulkDeleter.run()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::utils::_WaitThread.run()']]],
+ ['run',['run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeFolderUploader.run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeBulkDeleter.run()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::object_storage::FolderUploader.run()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::object_storage::BulkDeleter.run()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::utils::_WaitThread.run()']]],
['run_5fhooks',['run_hooks',['../classpyrax_1_1manager_1_1BaseManager.html#aac4d6a908dd774f73e389ad2b14b6968',1,'pyrax::manager::BaseManager']]],
['runproc',['runproc',['../namespacepyrax_1_1utils.html#a246bab6cd0c9c356c323014ce9724a72',1,'pyrax::utils']]]
];
diff --git a/docs/html/search/all_73.js b/docs/html/search/all_73.js
index f94f137a..80a221b7 100644
--- a/docs/html/search/all_73.js
+++ b/docs/html/search/all_73.js
@@ -1,7 +1,6 @@
var searchData=
[
['safe_5fissubclass',['safe_issubclass',['../namespacepyrax_1_1utils.html#ab35ae0f6f47300275663bd32a957c5f2',1,'pyrax::utils']]],
- ['safe_5fquote_5fchars',['SAFE_QUOTE_CHARS',['../namespacepyrax_1_1client.html#a8e0f4a21236e90f2e846cd833e963445',1,'pyrax::client']]],
['scaling_5fgroup',['scaling_group',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a7f23105293583afca652e62b3dc62613',1,'pyrax::autoscale::AutoScalePolicy']]],
['scalinggroup',['ScalingGroup',['../classpyrax_1_1autoscale_1_1ScalingGroup.html',1,'pyrax::autoscale']]],
['scalinggroupmanager',['ScalingGroupManager',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html',1,'pyrax::autoscale']]],
@@ -25,13 +24,14 @@ var searchData=
['services',['services',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::base_identity::BaseIdentity.services()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::fakes::FakeIdentity.services()'],['../namespacepyrax.html#af615dc60ad41afcddd9dfa11de351b5c',1,'pyrax.services()']]],
['session_5fpersistence',['session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a403633aa5d6c48d2ad993873bdbd4e2e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer']]],
['set',['set',['../classpyrax_1_1Settings.html#a621bd5e22d03cc48dbb784427b1c0fd8',1,'pyrax::Settings']]],
- ['set_5faccount_5fmetadata',['set_account_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcdn_5flog_5fretention',['set_cdn_log_retention',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5faccount_5fmetadata',['set_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::object_storage::ContainerManager.set_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::object_storage::StorageClient.set_account_metadata()']]],
+ ['set_5fcdn_5flog_5fretention',['set_cdn_log_retention',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::object_storage::ContainerManager.set_cdn_log_retention()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::object_storage::StorageClient.set_cdn_log_retention()']]],
+ ['set_5fcdn_5fmetadata',['set_cdn_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a168b21283d8328937f992993deec1f07',1,'pyrax::object_storage::ContainerManager']]],
['set_5fconnection_5flogging',['set_connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abac1dc72ddbe8369a8850b34e321f7db',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_connection_logging()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abac1dc72ddbe8369a8850b34e321f7db',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_connection_logging()']]],
- ['set_5fcontainer_5fcdn_5fmetadata',['set_container_cdn_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ab7d776a936c5feb8be88dc9d9e199337',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fmetadata',['set_container_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4bb2698330c6d409640337b1a80e16bf',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fweb_5ferror_5fpage',['set_container_web_error_page',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a5929bb83681725ad6e24fa49acae2a15',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fweb_5findex_5fpage',['set_container_web_index_page',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a77469aa965e7df1c81ad902bea324a36',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5fcontainer_5fcdn_5fmetadata',['set_container_cdn_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#ab7d776a936c5feb8be88dc9d9e199337',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fmetadata',['set_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#a4bb2698330c6d409640337b1a80e16bf',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fweb_5ferror_5fpage',['set_container_web_error_page',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5929bb83681725ad6e24fa49acae2a15',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fweb_5findex_5fpage',['set_container_web_index_page',['../classpyrax_1_1object__storage_1_1StorageClient.html#a77469aa965e7df1c81ad902bea324a36',1,'pyrax::object_storage::StorageClient']]],
['set_5fcontent_5fcaching',['set_content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#adf1ddf288772e7bd2a65e100881d1b5f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_content_caching()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#adf1ddf288772e7bd2a65e100881d1b5f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_content_caching()']]],
['set_5fcredential_5ffile',['set_credential_file',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a31357d099c87594b661d674bb12a56c0',1,'pyrax::base_identity::BaseIdentity.set_credential_file()'],['../namespacepyrax.html#a7375be0702b4c4322b674eaf94795c19',1,'pyrax.set_credential_file()']]],
['set_5fcredentials',['set_credentials',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::base_identity::BaseIdentity.set_credentials()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::identity::rax_identity::RaxIdentity.set_credentials()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
@@ -40,18 +40,18 @@ var searchData=
['set_5fenvironment',['set_environment',['../namespacepyrax.html#a083408c25f486a8aa2fab4a17a587f26',1,'pyrax']]],
['set_5ferror_5fpage',['set_error_page',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_error_page()']]],
['set_5fhttp_5fdebug',['set_http_debug',['../namespacepyrax.html#a9d6ec1abac4bb1602676632e096ac945',1,'pyrax']]],
- ['set_5fmetadata',['set_metadata',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cf_wrapper::container::Container.set_metadata()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cf_wrapper::storage_object::StorageObject.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::Node.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueClient.set_metadata()']]],
+ ['set_5fmetadata',['set_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::Node.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata()'],['../classpyrax_1_1object__storage_1_1Container.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::Container.set_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::ContainerManager.set_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::StorageObject.set_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::StorageObjectManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueClient.set_metadata()']]],
['set_5fmetadata_5ffor_5fnode',['set_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a40aea8e89a0b3f7a146312305263dd8e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a40aea8e89a0b3f7a146312305263dd8e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata_for_node()']]],
- ['set_5fobject_5fmetadata',['set_object_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5fobject_5fmetadata',['set_object_metadata',['../classpyrax_1_1object__storage_1_1Container.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::Container.set_object_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::ContainerManager.set_object_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::StorageClient.set_object_metadata()']]],
['set_5fpassword',['set_password',['../classpyrax_1_1fakes_1_1FakeKeyring.html#aec2232bed19634040d43b212ef49473c',1,'pyrax::fakes::FakeKeyring']]],
['set_5fsession_5fpersistence',['set_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a407ba440587e1dc45a9c75ced3f6ea8c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_session_persistence()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a407ba440587e1dc45a9c75ced3f6ea8c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_session_persistence()']]],
['set_5fsetting',['set_setting',['../namespacepyrax.html#a8a337253c5949ea5d35aefa452c7540c',1,'pyrax']]],
- ['set_5ftemp_5furl_5fkey',['set_temp_url_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a3815e3caab49229722d4761c169fc358',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5ftemp_5furl_5fkey',['set_temp_url_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a3815e3caab49229722d4761c169fc358',1,'pyrax::object_storage::StorageClient']]],
['set_5ftimeout',['set_timeout',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a095ce5c15e8d86c06b68342d3ef66c66',1,'pyrax::clouddns::CloudDNSClient']]],
- ['set_5fweb_5ferror_5fpage',['set_web_error_page',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::cf_wrapper::container::Container']]],
- ['set_5fweb_5findex_5fpage',['set_web_index_page',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::cf_wrapper::container::Container']]],
- ['settings',['Settings',['../classpyrax_1_1Settings.html',1,'pyrax']]],
+ ['set_5fweb_5ferror_5fpage',['set_web_error_page',['../classpyrax_1_1object__storage_1_1Container.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::object_storage::Container.set_web_error_page()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::object_storage::ContainerManager.set_web_error_page()']]],
+ ['set_5fweb_5findex_5fpage',['set_web_index_page',['../classpyrax_1_1object__storage_1_1Container.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::object_storage::Container.set_web_index_page()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::object_storage::ContainerManager.set_web_index_page()']]],
['settings',['settings',['../namespacepyrax.html#a9f379c663a918bd5beb1ed160f2b0c4d',1,'pyrax']]],
+ ['settings',['Settings',['../classpyrax_1_1Settings.html',1,'pyrax']]],
['setup',['setup',['../namespacesetup.html',1,'']]],
['setup_2epy',['setup.py',['../setup_8py.html',1,'']]],
['size',['size',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#aa3d6656320f1a7278c0c2c7fdf07617c',1,'pyrax::clouddatabases::CloudDatabaseVolume.size()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#aa3d6656320f1a7278c0c2c7fdf07617c',1,'pyrax::fakes::FakeDatabaseVolume.size()']]],
@@ -59,9 +59,11 @@ var searchData=
['snapshotnotavailable',['SnapshotNotAvailable',['../classpyrax_1_1exceptions_1_1SnapshotNotAvailable.html',1,'pyrax::exceptions']]],
['status',['status',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a015eb90e0de9f16e87bd149d4b9ce959',1,'pyrax::cloudloadbalancers::Node.status()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#a015eb90e0de9f16e87bd149d4b9ce959',1,'pyrax::fakes::FakeBlockStorageSnapshot.status()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeResponse.status'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeResponse.status'],['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeStatusChanger.status()']]],
['status_5fcode',['status_code',['../classpyrax_1_1fakes_1_1FakeResponse.html#ac275fb0ffa19246e789b4c3c9febcf00',1,'pyrax::fakes::FakeResponse.status_code()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a751c892e5a46b8e7d282085a5a5bf151',1,'pyrax::fakes::FakeResponse::status_code()'],['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#ac275fb0ffa19246e789b4c3c9febcf00',1,'pyrax::fakes::FakeIdentityResponse::status_code()']]],
- ['storage_5fobject_2epy',['storage_object.py',['../storage__object_8py.html',1,'']]],
- ['storageobject',['StorageObject',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html',1,'pyrax::cf_wrapper::storage_object']]],
- ['store_5fobject',['store_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::cf_wrapper::client::CFClient.store_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::cf_wrapper::container::Container.store_object()']]],
+ ['storageclient',['StorageClient',['../classpyrax_1_1object__storage_1_1StorageClient.html',1,'pyrax::object_storage']]],
+ ['storageobject',['StorageObject',['../classpyrax_1_1object__storage_1_1StorageObject.html',1,'pyrax::object_storage']]],
+ ['storageobjectiterator',['StorageObjectIterator',['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html',1,'pyrax::object_storage']]],
+ ['storageobjectmanager',['StorageObjectManager',['../classpyrax_1_1object__storage_1_1StorageObjectManager.html',1,'pyrax::object_storage']]],
+ ['store_5fobject',['store_object',['../classpyrax_1_1object__storage_1_1Container.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::object_storage::Container.store_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::object_storage::StorageClient.store_object()']]],
['subdomainresultsiterator',['SubdomainResultsIterator',['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html',1,'pyrax::clouddns']]],
- ['sync_5ffolder_5fto_5fcontainer',['sync_folder_to_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af2b0d6de7b4f7cb42d5ecef34b239907',1,'pyrax::cf_wrapper::client::CFClient']]]
+ ['sync_5ffolder_5fto_5fcontainer',['sync_folder_to_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#af2b0d6de7b4f7cb42d5ecef34b239907',1,'pyrax::object_storage::StorageClient']]]
];
diff --git a/docs/html/search/all_74.js b/docs/html/search/all_74.js
index bfc66827..460e30fa 100644
--- a/docs/html/search/all_74.js
+++ b/docs/html/search/all_74.js
@@ -12,8 +12,8 @@ var searchData=
['to_5fdict',['to_dict',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#aa5152a042338ea29555f11041ee6e330',1,'pyrax::cloudloadbalancers::Node.to_dict()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#aa5152a042338ea29555f11041ee6e330',1,'pyrax::cloudloadbalancers::VirtualIP.to_dict()']]],
['to_5ftimestamp',['to_timestamp',['../namespacepyrax_1_1utils.html#af4be48d96f3ad2c6cd297a76ccdb1a40',1,'pyrax::utils']]],
['token',['token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::base_identity::BaseIdentity.token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::fakes::FakeIdentity::token()']]],
- ['total_5fbytes',['total_bytes',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::cf_wrapper::container::Container.total_bytes()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::cf_wrapper::storage_object::StorageObject.total_bytes()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::fakes::FakeStorageObject.total_bytes()']]],
+ ['total_5fbytes',['total_bytes',['../classpyrax_1_1object__storage_1_1StorageObject.html#aae0d17bd3ac8c835e23cae7e9e3581d8',1,'pyrax::object_storage::StorageObject']]],
['trace',['trace',['../namespacepyrax_1_1utils.html#a1ef4c4162762c60a00cf44b5969127c5',1,'pyrax::utils']]],
- ['ttl',['ttl',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::cf_wrapper::client::FolderUploader.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSRecord.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSPTRRecord.ttl()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::queueing::QueueMessage.ttl()']]],
+ ['ttl',['ttl',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSRecord.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSPTRRecord.ttl()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::object_storage::FolderUploader.ttl()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::queueing::QueueMessage.ttl()']]],
['type',['type',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::clouddns::CloudDNSRecord.type()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::clouddns::CloudDNSPTRRecord::type()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::cloudloadbalancers::Node.type()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::cloudloadbalancers::VirtualIP::type()']]]
];
diff --git a/docs/html/search/all_75.js b/docs/html/search/all_75.js
index f2e5b748..4e189a13 100644
--- a/docs/html/search/all_75.js
+++ b/docs/html/search/all_75.js
@@ -30,19 +30,18 @@ var searchData=
['update_5fuser',['update_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::base_identity::BaseIdentity.update_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::clouddatabases::CloudDatabaseInstance.update_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::clouddatabases::CloudDatabaseClient.update_user()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::identity::rax_identity::RaxIdentity.update_user()']]],
['update_5fwebhook',['update_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::ScalingGroup.update_webhook()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::ScalingGroupManager.update_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::AutoScalePolicy.update_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::AutoScaleClient.update_webhook()']]],
['update_5fwebhook_5fmetadata',['update_webhook_metadata',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::ScalingGroup.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::ScalingGroupManager.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::AutoScalePolicy.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::AutoScaleClient.update_webhook_metadata()']]],
- ['upload_5ffile',['upload_file',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::cf_wrapper::client::CFClient.upload_file()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::cf_wrapper::container::Container.upload_file()']]],
- ['upload_5ffiles_5fin_5ffolder',['upload_files_in_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#af1d1df487458050d64d162846617d266',1,'pyrax::cf_wrapper::client::FolderUploader']]],
- ['upload_5ffolder',['upload_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1d81cba43ddabd40e412c5d709192958',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['upload_5fkey',['upload_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a699a1292b13ecfed10beb4ffcdf4f2e6',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['upload_5ffile',['upload_file',['../classpyrax_1_1object__storage_1_1Container.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::object_storage::Container.upload_file()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::object_storage::StorageClient.upload_file()']]],
+ ['upload_5ffiles_5fin_5ffolder',['upload_files_in_folder',['../classpyrax_1_1object__storage_1_1FolderUploader.html#af1d1df487458050d64d162846617d266',1,'pyrax::object_storage::FolderUploader']]],
+ ['upload_5ffolder',['upload_folder',['../classpyrax_1_1object__storage_1_1StorageClient.html#a1d81cba43ddabd40e412c5d709192958',1,'pyrax::object_storage::StorageClient']]],
+ ['upload_5fkey',['upload_key',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a699a1292b13ecfed10beb4ffcdf4f2e6',1,'pyrax::object_storage::FolderUploader']]],
['uploadfailed',['UploadFailed',['../classpyrax_1_1exceptions_1_1UploadFailed.html',1,'pyrax::exceptions']]],
- ['uri',['uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#af205052c80b55070237ee9052f067ba3',1,'pyrax::cf_wrapper::client::Connection']]],
['uri_5fbase',['uri_base',['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::fakes::FakeDatabaseManager::uri_base()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::fakes::FakeDNSManager.uri_base()'],['../classpyrax_1_1manager_1_1BaseManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::manager::BaseManager.uri_base()']]],
- ['url',['url',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#afcd5a3e84f2adb7f83fa6c99911f31e4',1,'pyrax::cf_wrapper::client::Connection.url()'],['../namespacesetup.html#aa03c1ef4c41f36b048cf58d5aade7653',1,'setup.url()']]],
+ ['url',['url',['../namespacesetup.html#aa03c1ef4c41f36b048cf58d5aade7653',1,'setup']]],
['url_5ffor',['url_for',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::service_catalog::ServiceCatalog']]],
['used',['used',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ab896e794c7918f3e8a6ca0f8339f1add',1,'pyrax::clouddatabases::CloudDatabaseVolume.used()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ab896e794c7918f3e8a6ca0f8339f1add',1,'pyrax::fakes::FakeDatabaseVolume.used()']]],
- ['user',['User',['../classpyrax_1_1base__identity_1_1User.html',1,'pyrax::base_identity']]],
['user',['user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a5cc32e366c87c4cb49e4309b75f57d64',1,'pyrax::base_identity::BaseIdentity']]],
- ['user_5fagent',['USER_AGENT',['../classpyrax_1_1fakes_1_1FakeClient.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeClient.USER_AGENT()'],['../classpyrax_1_1fakes_1_1FakeService.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeService.USER_AGENT()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::base_identity::BaseIdentity.user_agent()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::cf_wrapper::client::CFClient.user_agent()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::cf_wrapper::client::Connection.user_agent()'],['../classpyrax_1_1client_1_1BaseClient.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::client::BaseClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeClient.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeService.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeService::user_agent()'],['../namespacepyrax.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax.USER_AGENT()']]],
+ ['user',['User',['../classpyrax_1_1base__identity_1_1User.html',1,'pyrax::base_identity']]],
+ ['user_5fagent',['USER_AGENT',['../classpyrax_1_1fakes_1_1FakeClient.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeClient.USER_AGENT()'],['../classpyrax_1_1fakes_1_1FakeService.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeService.USER_AGENT()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::base_identity::BaseIdentity.user_agent()'],['../classpyrax_1_1client_1_1BaseClient.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::client::BaseClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeClient.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeService.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeService::user_agent()'],['../namespacepyrax.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax.USER_AGENT()']]],
['username',['username',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::base_identity::BaseIdentity::username()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::fakes::FakeIdentity::username()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::identity::rax_identity::RaxIdentity::username()']]],
['usernotfound',['UserNotFound',['../classpyrax_1_1exceptions_1_1UserNotFound.html',1,'pyrax::exceptions']]],
['utc_5fapi_5fdate_5fpattern',['UTC_API_DATE_PATTERN',['../namespacepyrax_1_1base__identity.html#ae8b883633e3a4412236e6b4e798f73f6',1,'pyrax::base_identity']]],
diff --git a/docs/html/search/all_76.js b/docs/html/search/all_76.js
index 461d6721..aeafcc94 100644
--- a/docs/html/search/all_76.js
+++ b/docs/html/search/all_76.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['verbose',['verbose',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::cf_wrapper::client::CFClient.verbose()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread.verbose()']]],
+ ['verbose',['verbose',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::object_storage::StorageClient.verbose()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread.verbose()']]],
['verify_5fssl',['verify_ssl',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::base_identity::BaseIdentity.verify_ssl()'],['../classpyrax_1_1client_1_1BaseClient.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::client::BaseClient.verify_ssl()'],['../namespacepyrax_1_1http.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::http.verify_ssl()']]],
['version',['version',['../classpyrax_1_1client_1_1BaseClient.html#a4c7a521b8f1a0769c09bfa4a1fca7dab',1,'pyrax::client::BaseClient::version()'],['../namespacepyrax_1_1version.html#af9c8593b58583463efe6932e24c9d6e6',1,'pyrax::version::version()'],['../namespacesetup.html#a4c7a521b8f1a0769c09bfa4a1fca7dab',1,'setup.version()']]],
['version_2epy',['version.py',['../version_8py.html',1,'']]],
diff --git a/docs/html/search/classes_62.js b/docs/html/search/classes_62.js
index 41a2c440..f55d6529 100644
--- a/docs/html/search/classes_62.js
+++ b/docs/html/search/classes_62.js
@@ -6,5 +6,5 @@ var searchData=
['basemanager',['BaseManager',['../classpyrax_1_1manager_1_1BaseManager.html',1,'pyrax::manager']]],
['basequeuemanager',['BaseQueueManager',['../classpyrax_1_1queueing_1_1BaseQueueManager.html',1,'pyrax::queueing']]],
['baseresource',['BaseResource',['../classpyrax_1_1resource_1_1BaseResource.html',1,'pyrax::resource']]],
- ['bulkdeleter',['BulkDeleter',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html',1,'pyrax::cf_wrapper::client']]]
+ ['bulkdeleter',['BulkDeleter',['../classpyrax_1_1object__storage_1_1BulkDeleter.html',1,'pyrax::object_storage']]]
];
diff --git a/docs/html/search/classes_63.js b/docs/html/search/classes_63.js
index 350131d5..74aec8ef 100644
--- a/docs/html/search/classes_63.js
+++ b/docs/html/search/classes_63.js
@@ -1,7 +1,6 @@
var searchData=
[
['cdnfailed',['CDNFailed',['../classpyrax_1_1exceptions_1_1CDNFailed.html',1,'pyrax::exceptions']]],
- ['cfclient',['CFClient',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html',1,'pyrax::cf_wrapper::client']]],
['clientexception',['ClientException',['../classpyrax_1_1exceptions_1_1ClientException.html',1,'pyrax::exceptions']]],
['cloudblockstorageclient',['CloudBlockStorageClient',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html',1,'pyrax::cloudblockstorage']]],
['cloudblockstoragemanager',['CloudBlockStorageManager',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html',1,'pyrax::cloudblockstorage']]],
@@ -45,6 +44,6 @@ var searchData=
['cloudnetwork',['CloudNetwork',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html',1,'pyrax::cloudnetworks']]],
['cloudnetworkclient',['CloudNetworkClient',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html',1,'pyrax::cloudnetworks']]],
['cloudnetworkmanager',['CloudNetworkManager',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkManager.html',1,'pyrax::cloudnetworks']]],
- ['connection',['Connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html',1,'pyrax::cf_wrapper::client']]],
- ['container',['Container',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html',1,'pyrax::cf_wrapper::container']]]
+ ['container',['Container',['../classpyrax_1_1object__storage_1_1Container.html',1,'pyrax::object_storage']]],
+ ['containermanager',['ContainerManager',['../classpyrax_1_1object__storage_1_1ContainerManager.html',1,'pyrax::object_storage']]]
];
diff --git a/docs/html/search/classes_66.js b/docs/html/search/classes_66.js
index 27a36eea..07d48333 100644
--- a/docs/html/search/classes_66.js
+++ b/docs/html/search/classes_66.js
@@ -16,6 +16,7 @@ var searchData=
['fakecloudnetwork',['FakeCloudNetwork',['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html',1,'pyrax::fakes']]],
['fakecloudnetworkclient',['FakeCloudNetworkClient',['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html',1,'pyrax::fakes']]],
['fakecontainer',['FakeContainer',['../classpyrax_1_1fakes_1_1FakeContainer.html',1,'pyrax::fakes']]],
+ ['fakecontainermanager',['FakeContainerManager',['../classpyrax_1_1fakes_1_1FakeContainerManager.html',1,'pyrax::fakes']]],
['fakecsclient',['FakeCSClient',['../classpyrax_1_1fakes_1_1FakeCSClient.html',1,'pyrax::fakes']]],
['fakedatabaseclient',['FakeDatabaseClient',['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html',1,'pyrax::fakes']]],
['fakedatabaseinstance',['FakeDatabaseInstance',['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html',1,'pyrax::fakes']]],
@@ -40,6 +41,7 @@ var searchData=
['fakeimagemanager',['FakeImageManager',['../classpyrax_1_1fakes_1_1FakeImageManager.html',1,'pyrax::fakes']]],
['fakeimagemembermanager',['FakeImageMemberManager',['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html',1,'pyrax::fakes']]],
['fakeimagetagmanager',['FakeImageTagManager',['../classpyrax_1_1fakes_1_1FakeImageTagManager.html',1,'pyrax::fakes']]],
+ ['fakeiterator',['FakeIterator',['../classpyrax_1_1fakes_1_1FakeIterator.html',1,'pyrax::fakes']]],
['fakekeyring',['FakeKeyring',['../classpyrax_1_1fakes_1_1FakeKeyring.html',1,'pyrax::fakes']]],
['fakeloadbalancer',['FakeLoadBalancer',['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html',1,'pyrax::fakes']]],
['fakeloadbalancerclient',['FakeLoadBalancerClient',['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html',1,'pyrax::fakes']]],
@@ -58,12 +60,14 @@ var searchData=
['fakeserver',['FakeServer',['../classpyrax_1_1fakes_1_1FakeServer.html',1,'pyrax::fakes']]],
['fakeservice',['FakeService',['../classpyrax_1_1fakes_1_1FakeService.html',1,'pyrax::fakes']]],
['fakestatuschanger',['FakeStatusChanger',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html',1,'pyrax::fakes']]],
+ ['fakestorageclient',['FakeStorageClient',['../classpyrax_1_1fakes_1_1FakeStorageClient.html',1,'pyrax::fakes']]],
['fakestorageobject',['FakeStorageObject',['../classpyrax_1_1fakes_1_1FakeStorageObject.html',1,'pyrax::fakes']]],
+ ['fakestorageobjectmanager',['FakeStorageObjectManager',['../classpyrax_1_1fakes_1_1FakeStorageObjectManager.html',1,'pyrax::fakes']]],
['fakevirtualip',['FakeVirtualIP',['../classpyrax_1_1fakes_1_1FakeVirtualIP.html',1,'pyrax::fakes']]],
- ['fault',['Fault',['../classpyrax_1_1cf__wrapper_1_1container_1_1Fault.html',1,'pyrax::cf_wrapper::container']]],
+ ['fault_5fcls',['Fault_cls',['../classpyrax_1_1object__storage_1_1Fault__cls.html',1,'pyrax::object_storage']]],
['filenotfound',['FileNotFound',['../classpyrax_1_1exceptions_1_1FileNotFound.html',1,'pyrax::exceptions']]],
['flavornotfound',['FlavorNotFound',['../classpyrax_1_1exceptions_1_1FlavorNotFound.html',1,'pyrax::exceptions']]],
['foldernotfound',['FolderNotFound',['../classpyrax_1_1exceptions_1_1FolderNotFound.html',1,'pyrax::exceptions']]],
- ['folderuploader',['FolderUploader',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html',1,'pyrax::cf_wrapper::client']]],
+ ['folderuploader',['FolderUploader',['../classpyrax_1_1object__storage_1_1FolderUploader.html',1,'pyrax::object_storage']]],
['forbidden',['Forbidden',['../classpyrax_1_1exceptions_1_1Forbidden.html',1,'pyrax::exceptions']]]
];
diff --git a/docs/html/search/classes_6e.js b/docs/html/search/classes_6e.js
index 34ea90cc..d403be16 100644
--- a/docs/html/search/classes_6e.js
+++ b/docs/html/search/classes_6e.js
@@ -7,6 +7,7 @@ var searchData=
['networklabelnotunique',['NetworkLabelNotUnique',['../classpyrax_1_1exceptions_1_1NetworkLabelNotUnique.html',1,'pyrax::exceptions']]],
['networknotfound',['NetworkNotFound',['../classpyrax_1_1exceptions_1_1NetworkNotFound.html',1,'pyrax::exceptions']]],
['noclientforservice',['NoClientForService',['../classpyrax_1_1exceptions_1_1NoClientForService.html',1,'pyrax::exceptions']]],
+ ['nocontentspecified',['NoContentSpecified',['../classpyrax_1_1exceptions_1_1NoContentSpecified.html',1,'pyrax::exceptions']]],
['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1Node.html',1,'pyrax::cloudloadbalancers']]],
['noendpointforregion',['NoEndpointForRegion',['../classpyrax_1_1exceptions_1_1NoEndpointForRegion.html',1,'pyrax::exceptions']]],
['noendpointforservice',['NoEndpointForService',['../classpyrax_1_1exceptions_1_1NoEndpointForService.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/classes_72.js b/docs/html/search/classes_72.js
index cca5a973..d9fed2d9 100644
--- a/docs/html/search/classes_72.js
+++ b/docs/html/search/classes_72.js
@@ -3,5 +3,6 @@ var searchData=
['raxidentity',['RaxIdentity',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html',1,'pyrax::identity::rax_identity']]],
['recordresultsiterator',['RecordResultsIterator',['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html',1,'pyrax::clouddns']]],
['resultsiterator',['ResultsIterator',['../classpyrax_1_1clouddns_1_1ResultsIterator.html',1,'pyrax::clouddns']]],
+ ['resultsiterator',['ResultsIterator',['../classpyrax_1_1utils_1_1ResultsIterator.html',1,'pyrax::utils']]],
['role',['Role',['../classpyrax_1_1base__identity_1_1Role.html',1,'pyrax::base_identity']]]
];
diff --git a/docs/html/search/classes_73.js b/docs/html/search/classes_73.js
index f4fc888a..6b671d9d 100644
--- a/docs/html/search/classes_73.js
+++ b/docs/html/search/classes_73.js
@@ -10,6 +10,9 @@ var searchData=
['serviceresponsefailure',['ServiceResponseFailure',['../classpyrax_1_1exceptions_1_1ServiceResponseFailure.html',1,'pyrax::exceptions']]],
['settings',['Settings',['../classpyrax_1_1Settings.html',1,'pyrax']]],
['snapshotnotavailable',['SnapshotNotAvailable',['../classpyrax_1_1exceptions_1_1SnapshotNotAvailable.html',1,'pyrax::exceptions']]],
- ['storageobject',['StorageObject',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html',1,'pyrax::cf_wrapper::storage_object']]],
+ ['storageclient',['StorageClient',['../classpyrax_1_1object__storage_1_1StorageClient.html',1,'pyrax::object_storage']]],
+ ['storageobject',['StorageObject',['../classpyrax_1_1object__storage_1_1StorageObject.html',1,'pyrax::object_storage']]],
+ ['storageobjectiterator',['StorageObjectIterator',['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html',1,'pyrax::object_storage']]],
+ ['storageobjectmanager',['StorageObjectManager',['../classpyrax_1_1object__storage_1_1StorageObjectManager.html',1,'pyrax::object_storage']]],
['subdomainresultsiterator',['SubdomainResultsIterator',['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html',1,'pyrax::clouddns']]]
];
diff --git a/docs/html/search/files_5f.js b/docs/html/search/files_5f.js
index c71958b5..f4241bbd 100644
--- a/docs/html/search/files_5f.js
+++ b/docs/html/search/files_5f.js
@@ -1,6 +1,5 @@
var searchData=
[
['_5f_5finit_5f_5f_2epy',['__init__.py',['../____init_____8py.html',1,'']]],
- ['_5f_5finit_5f_5f_2epy',['__init__.py',['../identity_2____init_____8py.html',1,'']]],
- ['_5f_5finit_5f_5f_2epy',['__init__.py',['../cf__wrapper_2____init_____8py.html',1,'']]]
+ ['_5f_5finit_5f_5f_2epy',['__init__.py',['../identity_2____init_____8py.html',1,'']]]
];
diff --git a/docs/html/search/files_63.js b/docs/html/search/files_63.js
index 386a31cd..995beaf8 100644
--- a/docs/html/search/files_63.js
+++ b/docs/html/search/files_63.js
@@ -1,12 +1,10 @@
var searchData=
[
- ['client_2epy',['client.py',['../cf__wrapper_2client_8py.html',1,'']]],
['client_2epy',['client.py',['../client_8py.html',1,'']]],
['cloudblockstorage_2epy',['cloudblockstorage.py',['../cloudblockstorage_8py.html',1,'']]],
['clouddatabases_2epy',['clouddatabases.py',['../clouddatabases_8py.html',1,'']]],
['clouddns_2epy',['clouddns.py',['../clouddns_8py.html',1,'']]],
['cloudloadbalancers_2epy',['cloudloadbalancers.py',['../cloudloadbalancers_8py.html',1,'']]],
['cloudmonitoring_2epy',['cloudmonitoring.py',['../cloudmonitoring_8py.html',1,'']]],
- ['cloudnetworks_2epy',['cloudnetworks.py',['../cloudnetworks_8py.html',1,'']]],
- ['container_2epy',['container.py',['../container_8py.html',1,'']]]
+ ['cloudnetworks_2epy',['cloudnetworks.py',['../cloudnetworks_8py.html',1,'']]]
];
diff --git a/docs/html/search/files_6f.html b/docs/html/search/files_6f.html
new file mode 100644
index 00000000..127aac1e
--- /dev/null
+++ b/docs/html/search/files_6f.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/html/search/files_6f.js b/docs/html/search/files_6f.js
new file mode 100644
index 00000000..2ee96124
--- /dev/null
+++ b/docs/html/search/files_6f.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['object_5fstorage_2epy',['object_storage.py',['../object__storage_8py.html',1,'']]]
+];
diff --git a/docs/html/search/files_73.js b/docs/html/search/files_73.js
index 1a2f66de..987a74f9 100644
--- a/docs/html/search/files_73.js
+++ b/docs/html/search/files_73.js
@@ -1,6 +1,5 @@
var searchData=
[
['service_5fcatalog_2epy',['service_catalog.py',['../service__catalog_8py.html',1,'']]],
- ['setup_2epy',['setup.py',['../setup_8py.html',1,'']]],
- ['storage_5fobject_2epy',['storage_object.py',['../storage__object_8py.html',1,'']]]
+ ['setup_2epy',['setup.py',['../setup_8py.html',1,'']]]
];
diff --git a/docs/html/search/functions_5f.js b/docs/html/search/functions_5f.js
index e453ea0e..69508bd3 100644
--- a/docs/html/search/functions_5f.js
+++ b/docs/html/search/functions_5f.js
@@ -4,10 +4,10 @@ var searchData=
['_5f_5feq_5f_5f',['__eq__',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a449f8fd74d358c0ad641b6c6d6917ba0',1,'pyrax::cloudloadbalancers::Node.__eq__()'],['../classpyrax_1_1resource_1_1BaseResource.html#a449f8fd74d358c0ad641b6c6d6917ba0',1,'pyrax::resource::BaseResource.__eq__()']]],
['_5f_5fexit_5f_5f',['__exit__',['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#a6de07022804200d0fb6383c0a237ee8e',1,'pyrax::utils::SelfDeletingTempfile.__exit__()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#a6de07022804200d0fb6383c0a237ee8e',1,'pyrax::utils::SelfDeletingTempDirectory.__exit__()']]],
['_5f_5fgetattr_5f_5f',['__getattr__',['../classpyrax_1_1base__identity_1_1Endpoint.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::base_identity::Endpoint.__getattr__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::base_identity::BaseIdentity.__getattr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::resource::BaseResource.__getattr__()'],['../classpyrax_1_1utils_1_1DotDict.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::utils::DotDict.__getattr__()']]],
- ['_5f_5finit_5f_5f',['__init__',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroup.__init__()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroupManager.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScalePolicy.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScaleWebhook.__init__()'],['../classpyrax_1_1base__identity_1_1Service.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Service.__init__()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Endpoint.__init__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseIdentity.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::CFClient.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::Connection.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::FolderUploader.__init__()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::client::BulkDeleter.__init__()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::container::Container.__init__()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cf_wrapper::storage_object::StorageObject.__init__()'],['../classpyrax_1_1client_1_1BaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::client::BaseClient.__init__()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseInstance.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSPTRRecord.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSManager.__init__()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::ResultsIterator.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::Node.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::VirtualIP.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorCheck.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorClient.__init__()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudnetworks::CloudNetworkClient.__init__()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::AmbiguousEndpoints.__init__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::ClientException.__init__()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObject.__init__()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeService.__init__()'],['../classpyrax_1_1fakes_1_1FakeCSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeFolderUploader.__init__()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBulkDeleter.__init__()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseInstance.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeNovaVolumeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNovaVolumeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageSnapshot.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancer.__init__()'],['../classpyrax_1_1fakes_1_1FakeNode.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNode.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDomain.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSRecord.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDevice.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetworkClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetwork.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScalePolicy.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleWebhook.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroupManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroup.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorCheck.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorNotification.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueue.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClaim.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClaim.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImage.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageMemberManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageTagManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentityService.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentity.__init__()'],['../classpyrax_1_1image_1_1Image.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::image::Image.__init__()'],['../classpyrax_1_1manager_1_1BaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::manager::BaseManager.__init__()'],['../classpyrax_1_1queueing_1_1Queue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::Queue.__init__()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::QueueMessage.__init__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::resource::BaseResource.__init__()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::service_catalog::ServiceCatalog.__init__()'],['../classpyrax_1_1utils_1_1DotDict.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::DotDict.__init__()'],['../classpyrax_1_1utils_1_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
- ['_5f_5fiter_5f_5f',['__iter__',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::clouddns::ResultsIterator']]],
+ ['_5f_5finit_5f_5f',['__init__',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroup.__init__()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::ScalingGroupManager.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScalePolicy.__init__()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::autoscale::AutoScaleWebhook.__init__()'],['../classpyrax_1_1base__identity_1_1Service.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Service.__init__()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::Endpoint.__init__()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseIdentity.__init__()'],['../classpyrax_1_1client_1_1BaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::client::BaseClient.__init__()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseVolume.__init__()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddatabases::CloudDatabaseInstance.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSPTRRecord.__init__()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::CloudDNSManager.__init__()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::clouddns::ResultsIterator.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::Node.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::VirtualIP.__init__()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorCheck.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.__init__()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudmonitoring::CloudMonitorClient.__init__()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::cloudnetworks::CloudNetworkClient.__init__()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::AmbiguousEndpoints.__init__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::exceptions::ClientException.__init__()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeContainerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeContainerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeContainer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeContainer.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObjectManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObjectManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeStorageObject.__init__()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeService.__init__()'],['../classpyrax_1_1fakes_1_1FakeCSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeFolderUploader.__init__()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBulkDeleter.__init__()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseInstance.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDatabaseClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDatabaseClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeNovaVolumeClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNovaVolumeClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageVolume.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageSnapshot.__init__()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeBlockStorageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancerManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancerManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeLoadBalancer.__init__()'],['../classpyrax_1_1fakes_1_1FakeNode.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeNode.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDomain.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSRecord.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSRecord.__init__()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeDNSDevice.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetworkClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetworkClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudNetwork.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScalePolicy.__init__()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeAutoScaleWebhook.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroupManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeScalingGroup.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorEntity.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorCheck.__init__()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeCloudMonitorNotification.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueue.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClaim.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClaim.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImage.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageClient.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageMemberManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageTagManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeImageManager.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentityService.__init__()'],['../classpyrax_1_1fakes_1_1FakeEndpoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEndpoint.__init__()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeIdentity.__init__()'],['../classpyrax_1_1image_1_1Image.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::image::Image.__init__()'],['../classpyrax_1_1manager_1_1BaseManager.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::manager::BaseManager.__init__()'],['../classpyrax_1_1object__storage_1_1Container.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::Container.__init__()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::StorageObject.__init__()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::StorageClient.__init__()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::FolderUploader.__init__()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::object_storage::BulkDeleter.__init__()'],['../classpyrax_1_1queueing_1_1Queue.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::Queue.__init__()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::queueing::QueueMessage.__init__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::resource::BaseResource.__init__()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::service_catalog::ServiceCatalog.__init__()'],['../classpyrax_1_1utils_1_1DotDict.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::DotDict.__init__()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::ResultsIterator.__init__()'],['../classpyrax_1_1utils_1_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
+ ['_5f_5fiter_5f_5f',['__iter__',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::clouddns::ResultsIterator.__iter__()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a3009f152864dea4eb5e89cd94143d563',1,'pyrax::utils::ResultsIterator.__iter__()']]],
['_5f_5fne_5f_5f',['__ne__',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad69df72a6bf0be3525fe45cd2f77f343',1,'pyrax::cloudloadbalancers::Node']]],
- ['_5f_5fnonzero_5f_5f',['__nonzero__',['../classpyrax_1_1cf__wrapper_1_1container_1_1Fault.html#a14f4a7f4cbfde7254adc73da3b2de9a5',1,'pyrax::cf_wrapper::container::Fault']]],
- ['_5f_5frepr_5f_5f',['__repr__',['../classpyrax_1_1base__identity_1_1Service.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::base_identity::Service.__repr__()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cf_wrapper::container::Container.__repr__()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cf_wrapper::storage_object::StorageObject.__repr__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::clouddns::CloudDNSPTRRecord.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::Node.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::VirtualIP.__repr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::resource::BaseResource.__repr__()']]],
+ ['_5f_5fnonzero_5f_5f',['__nonzero__',['../classpyrax_1_1object__storage_1_1Fault__cls.html#a14f4a7f4cbfde7254adc73da3b2de9a5',1,'pyrax::object_storage::Fault_cls']]],
+ ['_5f_5frepr_5f_5f',['__repr__',['../classpyrax_1_1base__identity_1_1Service.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::base_identity::Service.__repr__()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::clouddns::CloudDNSPTRRecord.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::Node.__repr__()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::cloudloadbalancers::VirtualIP.__repr__()'],['../classpyrax_1_1object__storage_1_1Container.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::object_storage::Container.__repr__()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::object_storage::StorageObject.__repr__()'],['../classpyrax_1_1resource_1_1BaseResource.html#ad8b9328939df072e4740cd9a63189744',1,'pyrax::resource::BaseResource.__repr__()']]],
['_5f_5fstr_5f_5f',['__str__',['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#aa7a4b9bc0941308e362738503137460e',1,'pyrax::exceptions::AmbiguousEndpoints.__str__()'],['../classpyrax_1_1exceptions_1_1ClientException.html#aa7a4b9bc0941308e362738503137460e',1,'pyrax::exceptions::ClientException.__str__()']]]
];
diff --git a/docs/html/search/functions_61.js b/docs/html/search/functions_61.js
index 4e0bc839..92016765 100644
--- a/docs/html/search/functions_61.js
+++ b/docs/html/search/functions_61.js
@@ -1,6 +1,5 @@
var searchData=
[
- ['account_5fmeta_5fprefix',['account_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4871daba36a85e962a609e677d654774',1,'pyrax::cf_wrapper::client::CFClient']]],
['action',['action',['../classpyrax_1_1fakes_1_1FakeManager.html#a2f9294757736802ae365f423f1e20b88',1,'pyrax::fakes::FakeManager.action()'],['../classpyrax_1_1manager_1_1BaseManager.html#a2f9294757736802ae365f423f1e20b88',1,'pyrax::manager::BaseManager.action()']]],
['add',['add',['../classpyrax_1_1image_1_1ImageTagManager.html#a66aa7c8063db6217a0a0061f8b7ba206',1,'pyrax::image::ImageTagManager']]],
['add_5faccess_5flist',['add_access_list',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a0f762dd53bd0e3907b59bea99bffb87e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.add_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a0f762dd53bd0e3907b59bea99bffb87e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.add_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a0f762dd53bd0e3907b59bea99bffb87e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.add_access_list()']]],
@@ -23,6 +22,7 @@ var searchData=
['algorithms',['algorithms',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aed666a925114f957f496874543d3f2a7',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient']]],
['all',['all',['../namespacepyrax_1_1manager.html#acedac857b1708c80eefe0a6c379bedec',1,'pyrax::manager']]],
['allowed_5fdomains',['allowed_domains',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a0a5c9a644fa7ae4b7a662ab33f00ed9c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient']]],
+ ['assure_5fcontainer',['assure_container',['../namespacepyrax_1_1object__storage.html#a5dad832cdbdfccc602bc5f8a482a075b',1,'pyrax::object_storage']]],
['assure_5fdomain',['assure_domain',['../namespacepyrax_1_1clouddns.html#ae456353f0a4abcc4b605b5eeac0656d1',1,'pyrax::clouddns']]],
['assure_5fimage',['assure_image',['../namespacepyrax_1_1image.html#a5e61997540ac52a2c90c2363b3bef66f',1,'pyrax::image']]],
['assure_5finstance',['assure_instance',['../namespacepyrax_1_1clouddatabases.html#a8f8b217553a66a79f0135899e14964b4',1,'pyrax::clouddatabases']]],
diff --git a/docs/html/search/functions_62.js b/docs/html/search/functions_62.js
index 93783cae..5b2ab4e4 100644
--- a/docs/html/search/functions_62.js
+++ b/docs/html/search/functions_62.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['bulk_5fdelete',['bulk_delete',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a31f701453fcf7a01b2af1e67d4d9a55b',1,'pyrax::cf_wrapper::client::CFClient']]]
+ ['bulk_5fdelete',['bulk_delete',['../classpyrax_1_1object__storage_1_1StorageClient.html#a31f701453fcf7a01b2af1e67d4d9a55b',1,'pyrax::object_storage::StorageClient']]]
];
diff --git a/docs/html/search/functions_63.js b/docs/html/search/functions_63.js
index 9fe87cca..973fb9ff 100644
--- a/docs/html/search/functions_63.js
+++ b/docs/html/search/functions_63.js
@@ -1,14 +1,12 @@
var searchData=
[
- ['cancel_5ffolder_5fupload',['cancel_folder_upload',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a621a0e61fdb17290b5e9f5dec5eb12fc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['cancel_5ffolder_5fupload',['cancel_folder_upload',['../classpyrax_1_1object__storage_1_1StorageClient.html#a621a0e61fdb17290b5e9f5dec5eb12fc',1,'pyrax::object_storage::StorageClient']]],
['case_5finsensitive_5fupdate',['case_insensitive_update',['../namespacepyrax_1_1utils.html#af3249b7bd46bd8a85fda01ce6a90304e',1,'pyrax::utils']]],
- ['cdn_5fenabled',['cdn_enabled',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2335e6e10f37188b2c023f9c5575c299',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fmeta_5fprefix',['cdn_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a031c7c89ca95f8d90c5ce46041dbb983',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['cdn_5frequest',['cdn_request',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ad1c79a1e8a4bbf3b8286ca87c62e6da5',1,'pyrax::cf_wrapper::client::Connection']]],
- ['change_5fcontent_5ftype',['change_content_type',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a9ff9b500eb0d5020f41595749b3b636f',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
+ ['cdn_5frequest',['cdn_request',['../classpyrax_1_1object__storage_1_1StorageClient.html#ad1c79a1e8a4bbf3b8286ca87c62e6da5',1,'pyrax::object_storage::StorageClient']]],
+ ['change_5fcontent_5ftype',['change_content_type',['../classpyrax_1_1object__storage_1_1StorageObject.html#a9ff9b500eb0d5020f41595749b3b636f',1,'pyrax::object_storage::StorageObject']]],
['change_5fimage_5fname',['change_image_name',['../classpyrax_1_1image_1_1ImageClient.html#aee621a307db99440e1f800b60f957ccf',1,'pyrax::image::ImageClient']]],
['change_5fname',['change_name',['../classpyrax_1_1image_1_1Image.html#af42f1a54e0d284d6109f3a994dc44e69',1,'pyrax::image::Image']]],
- ['change_5fobject_5fcontent_5ftype',['change_object_content_type',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::cf_wrapper::client::CFClient.change_object_content_type()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::cf_wrapper::container::Container.change_object_content_type()']]],
+ ['change_5fobject_5fcontent_5ftype',['change_object_content_type',['../classpyrax_1_1object__storage_1_1Container.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::Container.change_object_content_type()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::ContainerManager.change_object_content_type()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a7e76f3530378ae1328a083c7766c2ada',1,'pyrax::object_storage::StorageClient.change_object_content_type()']]],
['change_5fpassword',['change_password',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ae31deef7bd7c6a09c61bf83c66f5a16a',1,'pyrax::clouddatabases::CloudDatabaseUser']]],
['change_5fuser_5fpassword',['change_user_password',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseUserManager.change_user_password()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseInstance.change_user_password()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a3d7d0bcb779f81d9803cb5afffed69a3',1,'pyrax::clouddatabases::CloudDatabaseClient.change_user_password()']]],
['changes_5fsince',['changes_since',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSDomain.changes_since()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSManager.changes_since()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ac31a3a61b9555672f6d51ae74ff22999',1,'pyrax::clouddns::CloudDNSClient.changes_since()']]],
@@ -33,21 +31,21 @@ var searchData=
['connect_5fto_5fimages',['connect_to_images',['../namespacepyrax.html#a0adcbd0664ff8fb086c10a68d6f9696c',1,'pyrax']]],
['connect_5fto_5fqueues',['connect_to_queues',['../namespacepyrax.html#ac8d659180e8fac04349063827198b196',1,'pyrax']]],
['connect_5fto_5fservices',['connect_to_services',['../namespacepyrax.html#a708483dfb93616381fb0ec9338ab5528',1,'pyrax']]],
- ['container_5fmeta_5fprefix',['container_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6082429a25cf887c6e215dbd6381bb8d',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['container',['container',['../classpyrax_1_1object__storage_1_1StorageObject.html#a09a2643ef6ccbde0ae42188d3325be36',1,'pyrax::object_storage::StorageObject.container()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a09a2643ef6ccbde0ae42188d3325be36',1,'pyrax::object_storage::StorageObjectManager.container()']]],
['content',['content',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#a0899ceb404ac85e4aa0d35445b537908',1,'pyrax::fakes::FakeIdentityResponse']]],
['cooldown',['cooldown',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2268f26f552b5fffb9a0cb5fca09048b',1,'pyrax::autoscale::ScalingGroup.cooldown'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2268f26f552b5fffb9a0cb5fca09048b',1,'pyrax::autoscale::ScalingGroup.cooldown']]],
- ['copy',['copy',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a2fa43c22b5f7af93ba8b4a56871f006a',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['copy_5fobject',['copy_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::cf_wrapper::client::CFClient.copy_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::cf_wrapper::container::Container.copy_object()']]],
- ['create',['create',['../classpyrax_1_1client_1_1BaseClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::client::BaseClient.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlanManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlanManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorClient.create()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudnetworks::CloudNetworkClient.create()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeManager.create()'],['../classpyrax_1_1image_1_1ImageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageManager.create()'],['../classpyrax_1_1image_1_1ImageMemberManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageMemberManager.create()'],['../classpyrax_1_1image_1_1ImageTasksManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageTasksManager.create()'],['../classpyrax_1_1image_1_1ImageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageClient.create()'],['../classpyrax_1_1manager_1_1BaseManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::manager::BaseManager.create()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueManager.create()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueClient.create()']]],
+ ['copy',['copy',['../classpyrax_1_1object__storage_1_1StorageObject.html#a2fa43c22b5f7af93ba8b4a56871f006a',1,'pyrax::object_storage::StorageObject']]],
+ ['copy_5fobject',['copy_object',['../classpyrax_1_1object__storage_1_1Container.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::Container.copy_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::ContainerManager.copy_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a7d45157fae0af819d907da6b00fa2378',1,'pyrax::object_storage::StorageClient.copy_object()']]],
+ ['create',['create',['../classpyrax_1_1client_1_1BaseClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::client::BaseClient.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlanManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlanManager.create()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudmonitoring::CloudMonitorClient.create()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::cloudnetworks::CloudNetworkClient.create()'],['../classpyrax_1_1fakes_1_1FakeStorageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeStorageClient.create()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::fakes::FakeManager.create()'],['../classpyrax_1_1image_1_1ImageManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageManager.create()'],['../classpyrax_1_1image_1_1ImageMemberManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageMemberManager.create()'],['../classpyrax_1_1image_1_1ImageTasksManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageTasksManager.create()'],['../classpyrax_1_1image_1_1ImageClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::image::ImageClient.create()'],['../classpyrax_1_1manager_1_1BaseManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::manager::BaseManager.create()'],['../classpyrax_1_1object__storage_1_1Container.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::Container.create()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::ContainerManager.create()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::object_storage::StorageObjectManager.create()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueManager.create()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a5b7ef0221e471e99fa7f0a87a28ba1ea',1,'pyrax::queueing::QueueClient.create()']]],
['create_5falarm',['create_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorEntity.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorCheck.create_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5e3e83b1715922337eb99e95373166e6',1,'pyrax::cloudmonitoring::CloudMonitorClient.create_alarm()']]],
['create_5fbackup',['create_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseManager.create_backup()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_backup()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a02e9656d9c78c0834d17bfced831845d',1,'pyrax::clouddatabases::CloudDatabaseClient.create_backup()']]],
['create_5fcheck',['create_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a6fc873d6c66c1173dc63793fd2cc72d6',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.create_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a6fc873d6c66c1173dc63793fd2cc72d6',1,'pyrax::cloudmonitoring::CloudMonitorClient.create_check()']]],
- ['create_5fcontainer',['create_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a31b9196903b253dd2cd99dc4d7a0774e',1,'pyrax::cf_wrapper::client::CFClient']]],
['create_5fcontext',['create_context',['../namespacepyrax.html#addcacb55a21dd0665668678a2dde0271',1,'pyrax']]],
['create_5fdatabase',['create_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a287e0595d14610db48012f18e10d60d5',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a287e0595d14610db48012f18e10d60d5',1,'pyrax::clouddatabases::CloudDatabaseClient.create_database()']]],
['create_5fentity',['create_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a287a9c4c88ac4ade6073ff5ad10a8fb9',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['create_5fnotification',['create_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aa1579d27c94116ec606bc01b3944dae0',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['create_5fnotification_5fplan',['create_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#adbe3d30cfff0796002e143442e5eb225',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
+ ['create_5fobject',['create_object',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a9819e66fd5dc8d1688ab30683cf7b1ff',1,'pyrax::object_storage::ContainerManager.create_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a9819e66fd5dc8d1688ab30683cf7b1ff',1,'pyrax::object_storage::StorageClient.create_object()']]],
['create_5fsnapshot',['create_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.create_snapshot()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.create_snapshot()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a75cc4154491155dec3c34ea545de7d36',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.create_snapshot()']]],
['create_5ftenant',['create_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#afb882c0e80402ee17bf29c7af13d2a38',1,'pyrax::base_identity::BaseIdentity']]],
['create_5fuser',['create_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::base_identity::BaseIdentity.create_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::clouddatabases::CloudDatabaseInstance.create_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::clouddatabases::CloudDatabaseClient.create_user()']]]
diff --git a/docs/html/search/functions_64.js b/docs/html/search/functions_64.js
index fef5ccaf..04a12c9c 100644
--- a/docs/html/search/functions_64.js
+++ b/docs/html/search/functions_64.js
@@ -1,32 +1,33 @@
var searchData=
[
- ['delete',['delete',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScalePolicy.delete()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScaleWebhook.delete()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cf_wrapper::container::Container.delete()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cf_wrapper::storage_object::StorageObject.delete()'],['../classpyrax_1_1client_1_1BaseClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::client::BaseClient.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseDatabase.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseUser.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSDomain.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSPTRRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSManager.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSClient.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::Node.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::VirtualIP.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetwork.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetworkClient.delete()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::fakes::FakeManager.delete()'],['../classpyrax_1_1manager_1_1BaseManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::manager::BaseManager.delete()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessage.delete()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessageManager.delete()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::resource::BaseResource.delete()']]],
+ ['delete',['delete',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScalePolicy.delete()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::autoscale::AutoScaleWebhook.delete()'],['../classpyrax_1_1client_1_1BaseClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::client::BaseClient.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshot.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshot.delete()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseDatabase.delete()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddatabases::CloudDatabaseUser.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSDomain.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSPTRRecord.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSManager.delete()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::clouddns::CloudDNSClient.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::Node.delete()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudloadbalancers::VirtualIP.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.delete()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetwork.delete()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::cloudnetworks::CloudNetworkClient.delete()'],['../classpyrax_1_1fakes_1_1FakeManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::fakes::FakeManager.delete()'],['../classpyrax_1_1manager_1_1BaseManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::manager::BaseManager.delete()'],['../classpyrax_1_1object__storage_1_1Container.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::Container.delete()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::ContainerManager.delete()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::StorageObjectManager.delete()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::object_storage::StorageClient.delete()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessage.delete()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::queueing::QueueMessageManager.delete()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab48bde70a0927a83d62464cb0627c34b',1,'pyrax::resource::BaseResource.delete()']]],
['delete_5faccess_5flist',['delete_access_list',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a9435aa1b466627d94f4ab7065a91e4f8',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_access_list()']]],
['delete_5faccess_5flist_5fitems',['delete_access_list_items',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_access_list_items()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_access_list_items()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a2fd3c0d8eb07bd4f48fdad4c134e1aae',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_access_list_items()']]],
+ ['delete_5faccount_5fmetadata',['delete_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#af721d43465741e7f33f3cd931c94b50a',1,'pyrax::object_storage::ContainerManager.delete_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af721d43465741e7f33f3cd931c94b50a',1,'pyrax::object_storage::StorageClient.delete_account_metadata()']]],
['delete_5falarm',['delete_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorEntity.delete_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.delete_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aa6f9a8547a22941467c661e1c3b83178',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete_alarm()']]],
- ['delete_5fall_5fobjects',['delete_all_objects',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::cf_wrapper::container::Container']]],
+ ['delete_5fall_5fobjects',['delete_all_objects',['../classpyrax_1_1object__storage_1_1Container.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::object_storage::Container.delete_all_objects()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a29c7d5f06a4fdc49b064a4352e8c8763',1,'pyrax::object_storage::StorageObjectManager.delete_all_objects()']]],
['delete_5fall_5fsnapshots',['delete_all_snapshots',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#aec8a47767c07e19ef3ad9f6b974240bb',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume']]],
['delete_5fbackup',['delete_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a75e968bbf5e6ff6c377c3bf0f8f56694',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
['delete_5fby_5fids',['delete_by_ids',['../classpyrax_1_1queueing_1_1Queue.html#ab3f3c42b68d285259934117c1a8f65e5',1,'pyrax::queueing::Queue.delete_by_ids()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ab3f3c42b68d285259934117c1a8f65e5',1,'pyrax::queueing::QueueMessageManager.delete_by_ids()']]],
['delete_5fcheck',['delete_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorEntity.delete_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.delete_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4efaacdc5baa3b0cf23478e90a16a5b9',1,'pyrax::cloudmonitoring::CloudMonitorClient.delete_check()']]],
['delete_5fconnection_5fthrottle',['delete_connection_throttle',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ae08266e5e13ddc6e99a972671e132d51',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_connection_throttle()']]],
- ['delete_5fcontainer',['delete_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac314b663a2e0552b6403f04558be2735',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['delete_5fcontainer_5fmetadata',['delete_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#a0d4266c18da5bcf412fe82044591b343',1,'pyrax::object_storage::StorageClient']]],
['delete_5fdatabase',['delete_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a55a252283f51314fe80a1f74f4ebf46f',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a55a252283f51314fe80a1f74f4ebf46f',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_database()']]],
['delete_5fentity',['delete_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4f0f541b858158a007e2eca4daa25445',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['delete_5fhealth_5fmonitor',['delete_health_monitor',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a856597bc9c0b9484f62e3d7ae78c3099',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_health_monitor()']]],
['delete_5fimage_5fmember',['delete_image_member',['../classpyrax_1_1image_1_1ImageClient.html#af01ef62eab3600aa457db708008dad7e',1,'pyrax::image::ImageClient']]],
['delete_5fimage_5ftag',['delete_image_tag',['../classpyrax_1_1image_1_1ImageClient.html#a7c0e66950648c6a8d4fdbe87c0e354c2',1,'pyrax::image::ImageClient']]],
- ['delete_5fin_5fseconds',['delete_in_seconds',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a4c205bc29b6fdece30a5bf28e85dfd3f',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
+ ['delete_5fin_5fseconds',['delete_in_seconds',['../classpyrax_1_1object__storage_1_1StorageObject.html#a4c205bc29b6fdece30a5bf28e85dfd3f',1,'pyrax::object_storage::StorageObject']]],
['delete_5fmember',['delete_member',['../classpyrax_1_1image_1_1Image.html#aa4c98888249447ae65259f24d75b35bc',1,'pyrax::image::Image']]],
['delete_5fmessage',['delete_message',['../classpyrax_1_1queueing_1_1Queue.html#acff825cd612230881431faa0b8f1ba64',1,'pyrax::queueing::Queue.delete_message()'],['../classpyrax_1_1queueing_1_1QueueClient.html#acff825cd612230881431faa0b8f1ba64',1,'pyrax::queueing::QueueClient.delete_message()']]],
['delete_5fmessages_5fby_5fids',['delete_messages_by_ids',['../classpyrax_1_1queueing_1_1QueueClient.html#abaed1d07238dbd332c4609a83ea8dbff',1,'pyrax::queueing::QueueClient']]],
- ['delete_5fmetadata',['delete_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::Node.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata()']]],
+ ['delete_5fmetadata',['delete_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::Node.delete_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab4b26663be70bc5c9a8d3bf3b473b328',1,'pyrax::object_storage::ContainerManager.delete_metadata()']]],
['delete_5fmetadata_5ffor_5fnode',['delete_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a38317481667772b2f3483f5360bbb08f',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a38317481667772b2f3483f5360bbb08f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_metadata_for_node()']]],
['delete_5fnode',['delete_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a616947868beb4492f797b21aeb320d90',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_node()']]],
['delete_5fnotification',['delete_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1507022684013e59d9279645071071d4',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['delete_5fnotification_5fplan',['delete_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#abdd5616e58c4673c7887f6650cee075c',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['delete_5fobject',['delete_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::cf_wrapper::client::CFClient.delete_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::cf_wrapper::container::Container.delete_object()']]],
- ['delete_5fobject_5fin_5fseconds',['delete_object_in_seconds',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::cf_wrapper::client::CFClient.delete_object_in_seconds()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::cf_wrapper::container::Container.delete_object_in_seconds()']]],
+ ['delete_5fobject',['delete_object',['../classpyrax_1_1object__storage_1_1Container.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::Container.delete_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::ContainerManager.delete_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#aaf3e88c7945760a803d04d99c7a39364',1,'pyrax::object_storage::StorageClient.delete_object()']]],
+ ['delete_5fobject_5fin_5fseconds',['delete_object_in_seconds',['../classpyrax_1_1object__storage_1_1Container.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::Container.delete_object_in_seconds()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::ContainerManager.delete_object_in_seconds()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a157faa240c2d81626b226019fd4e7482',1,'pyrax::object_storage::StorageClient.delete_object_in_seconds()']]],
['delete_5fpolicy',['delete_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::ScalingGroup.delete_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::ScalingGroupManager.delete_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abdafb5a55ff1bb75ff43db8bf644f276',1,'pyrax::autoscale::AutoScaleClient.delete_policy()']]],
['delete_5fptr_5frecords',['delete_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#acc7bb619a838e10967e3555ec3d02bf8',1,'pyrax::clouddns::CloudDNSManager.delete_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#acc7bb619a838e10967e3555ec3d02bf8',1,'pyrax::clouddns::CloudDNSClient.delete_ptr_records()']]],
['delete_5frecord',['delete_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSDomain.delete_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSManager.delete_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a42e0e029c6c4823504401e8a3ba99d14',1,'pyrax::clouddns::CloudDNSClient.delete_record()']]],
@@ -42,6 +43,6 @@ var searchData=
['delete_5fwebhook',['delete_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ae0dc92290d6e28a9f163bce15d037bf9',1,'pyrax::autoscale::ScalingGroup.delete_webhook()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ae0dc92290d6e28a9f163bce15d037bf9',1,'pyrax::autoscale::ScalingGroupManager.delete_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ae0dc92290d6e28a9f163bce15d037bf9',1,'pyrax::autoscale::AutoScalePolicy.delete_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ae0dc92290d6e28a9f163bce15d037bf9',1,'pyrax::autoscale::AutoScaleClient.delete_webhook()']]],
['detach',['detach',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#acaedb9678123c696fc17b7d4d46e1a10',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.detach()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#acaedb9678123c696fc17b7d4d46e1a10',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.detach()']]],
['dict_5fto_5fqs',['dict_to_qs',['../namespacepyrax_1_1utils.html#a4846bc482f7a79cbdb05401113c5e618',1,'pyrax::utils']]],
- ['download',['download',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['download_5fobject',['download_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::cf_wrapper::client::CFClient.download_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::cf_wrapper::container::Container.download_object()']]]
+ ['download',['download',['../classpyrax_1_1object__storage_1_1Container.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::Container.download()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::StorageObject.download()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a87785e5d44757bc4bd91c6694e751daa',1,'pyrax::object_storage::StorageObjectManager.download()']]],
+ ['download_5fobject',['download_object',['../classpyrax_1_1object__storage_1_1Container.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::Container.download_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::ContainerManager.download_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a4d536318080f1745a14922224b2a28b5',1,'pyrax::object_storage::StorageClient.download_object()']]]
];
diff --git a/docs/html/search/functions_65.js b/docs/html/search/functions_65.js
index 8ff83e59..c0109c26 100644
--- a/docs/html/search/functions_65.js
+++ b/docs/html/search/functions_65.js
@@ -1,9 +1,9 @@
var searchData=
[
['enable_5froot_5fuser',['enable_root_user',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a9c5207c3983e465d9880d89e890d8bfc',1,'pyrax::clouddatabases::CloudDatabaseInstance.enable_root_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a9c5207c3983e465d9880d89e890d8bfc',1,'pyrax::clouddatabases::CloudDatabaseClient.enable_root_user()']]],
- ['ensure_5fcdn',['ensure_cdn',['../namespacepyrax_1_1cf__wrapper_1_1client.html#ac4b8c34dc2906a3e5f7a79ab765d4b59',1,'pyrax::cf_wrapper::client']]],
['env',['env',['../namespacepyrax_1_1utils.html#a9790d3a239a8e290bffbeef17c48f017',1,'pyrax::utils']]],
['environments',['environments',['../classpyrax_1_1Settings.html#a989dd2f2e43c5e8b53cfd5933054c2ea',1,'pyrax::Settings']]],
+ ['etag',['etag',['../classpyrax_1_1object__storage_1_1StorageObject.html#aebd2535adaefe60dbda5cf11f4d7905c',1,'pyrax::object_storage::StorageObject']]],
['execute',['execute',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#ad4a3a293739ba23e084f19c685303590',1,'pyrax::autoscale::AutoScalePolicy']]],
['execute_5fpolicy',['execute_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a34e31ecc0ff1fc06f15621d89ef81aa6',1,'pyrax::autoscale::ScalingGroup.execute_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a34e31ecc0ff1fc06f15621d89ef81aa6',1,'pyrax::autoscale::ScalingGroupManager.execute_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a34e31ecc0ff1fc06f15621d89ef81aa6',1,'pyrax::autoscale::AutoScaleClient.execute_policy()']]],
['export',['export',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a7aff5c605f882c9bad6df59ef505bb5b',1,'pyrax::clouddns::CloudDNSDomain']]],
diff --git a/docs/html/search/functions_66.js b/docs/html/search/functions_66.js
index bc84182c..c7804660 100644
--- a/docs/html/search/functions_66.js
+++ b/docs/html/search/functions_66.js
@@ -2,19 +2,21 @@ var searchData=
[
['fake_5fresponse',['fake_response',['../classpyrax_1_1fakes_1_1FakeIdentity.html#aa3cc0ca395eea5168bbd9033dbf1b8ef',1,'pyrax::fakes::FakeIdentity']]],
['fake_5frun',['fake_run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a303328b2517541ce3b1f8bf994f180eb',1,'pyrax::fakes::FakeFolderUploader.fake_run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a303328b2517541ce3b1f8bf994f180eb',1,'pyrax::fakes::FakeBulkDeleter.fake_run()']]],
- ['fetch_5fdlo',['fetch_dlo',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaef0d2bdb7e63ca8f1f0c619cad80253',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['fetch_5fobject',['fetch_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::cf_wrapper::client::CFClient.fetch_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::cf_wrapper::container::Container.fetch_object()']]],
- ['fetch_5fpartial',['fetch_partial',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['fetch',['fetch',['../classpyrax_1_1object__storage_1_1Container.html#a50ff2dfa5d3a485eae28edf1160744aa',1,'pyrax::object_storage::Container.fetch()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a50ff2dfa5d3a485eae28edf1160744aa',1,'pyrax::object_storage::StorageObjectManager.fetch()']]],
+ ['fetch_5fcdn_5fdata',['fetch_cdn_data',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ae312f7b1026f9df20f49e335768b6bcf',1,'pyrax::object_storage::ContainerManager']]],
+ ['fetch_5fdlo',['fetch_dlo',['../classpyrax_1_1object__storage_1_1StorageClient.html#aaef0d2bdb7e63ca8f1f0c619cad80253',1,'pyrax::object_storage::StorageClient']]],
+ ['fetch_5fobject',['fetch_object',['../classpyrax_1_1object__storage_1_1Container.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::Container.fetch_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::ContainerManager.fetch_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1c274968ef395c2b88a4d67c24f30f8e',1,'pyrax::object_storage::StorageClient.fetch_object()']]],
+ ['fetch_5fpartial',['fetch_partial',['../classpyrax_1_1object__storage_1_1Container.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::Container.fetch_partial()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::ContainerManager.fetch_partial()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::StorageObjectManager.fetch_partial()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ad1e7a72f5953d9a66e17bbe53b38fdc2',1,'pyrax::object_storage::StorageClient.fetch_partial()']]],
['field_5fnames',['field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#a0b9c1a726225d02b85a31d2fc7508352',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]],
- ['find',['find',['../classpyrax_1_1client_1_1BaseClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::client::BaseClient.find()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::cloudmonitoring::CloudMonitorClient.find()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::fakes::FakeManager.find()'],['../classpyrax_1_1manager_1_1BaseManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::manager::BaseManager.find()']]],
+ ['find',['find',['../classpyrax_1_1client_1_1BaseClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::client::BaseClient.find()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::cloudmonitoring::CloudMonitorClient.find()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::fakes::FakeManager.find()'],['../classpyrax_1_1manager_1_1BaseManager.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::manager::BaseManager.find()'],['../classpyrax_1_1object__storage_1_1Container.html#a01f90f57b7acd55e177611f5d0f7df23',1,'pyrax::object_storage::Container.find()']]],
['find_5fall_5fchecks',['find_all_checks',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a85522a4725d32d0924f3196f59f91d92',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.find_all_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a85522a4725d32d0924f3196f59f91d92',1,'pyrax::cloudmonitoring::CloudMonitorClient.find_all_checks()']]],
['find_5fnetwork_5fby_5flabel',['find_network_by_label',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab9a076a96d8be6ef848669c841c472f7',1,'pyrax::cloudnetworks::CloudNetworkClient']]],
['find_5frecord',['find_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a20415cf3e70cdff472ca1161a6ad2e64',1,'pyrax::clouddns::CloudDNSDomain.find_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a20415cf3e70cdff472ca1161a6ad2e64',1,'pyrax::clouddns::CloudDNSClient.find_record()']]],
['find_5fuser_5fby_5femail',['find_user_by_email',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a7b76b7abe1a446c07c41572021183d78',1,'pyrax::base_identity::BaseIdentity.find_user_by_email()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a7b76b7abe1a446c07c41572021183d78',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_email()']]],
['find_5fuser_5fby_5fid',['find_user_by_id',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::base_identity::BaseIdentity.find_user_by_id()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_id()']]],
['find_5fuser_5fby_5fname',['find_user_by_name',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::base_identity::BaseIdentity.find_user_by_name()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::identity::rax_identity::RaxIdentity.find_user_by_name()']]],
- ['findall',['findall',['../classpyrax_1_1client_1_1BaseClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::client::BaseClient.findall()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::clouddns::CloudDNSManager.findall()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::cloudmonitoring::CloudMonitorClient.findall()'],['../classpyrax_1_1manager_1_1BaseManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::manager::BaseManager.findall()']]],
- ['folder_5fname_5ffrom_5fpath',['folder_name_from_path',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ac467e83660d484cbbad5626094c00dcd',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['findall',['findall',['../classpyrax_1_1client_1_1BaseClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::client::BaseClient.findall()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::clouddns::CloudDNSManager.findall()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::cloudmonitoring::CloudMonitorClient.findall()'],['../classpyrax_1_1manager_1_1BaseManager.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::manager::BaseManager.findall()'],['../classpyrax_1_1object__storage_1_1Container.html#a1bae9ed7d134ea1c1e9a39726adea1e1',1,'pyrax::object_storage::Container.findall()']]],
+ ['folder_5fname_5ffrom_5fpath',['folder_name_from_path',['../classpyrax_1_1object__storage_1_1FolderUploader.html#ac467e83660d484cbbad5626094c00dcd',1,'pyrax::object_storage::FolderUploader']]],
['folder_5fsize',['folder_size',['../namespacepyrax_1_1utils.html#a44e6cd242f9d12705e157706a6caddfe',1,'pyrax::utils']]],
['from_5fresponse',['from_response',['../namespacepyrax_1_1exceptions.html#a6ec044b1084ca1566f5a0e9555c63998',1,'pyrax::exceptions']]]
];
diff --git a/docs/html/search/functions_67.js b/docs/html/search/functions_67.js
index 926b169a..683ba389 100644
--- a/docs/html/search/functions_67.js
+++ b/docs/html/search/functions_67.js
@@ -1,15 +1,19 @@
var searchData=
[
- ['get',['get',['../classpyrax_1_1Settings.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::Settings.get()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScalePolicy.get()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScaleWebhook.get()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::base_identity::Endpoint.get()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cf_wrapper::storage_object::StorageObject.get()'],['../classpyrax_1_1client_1_1BaseClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::client::BaseClient.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseVolume.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseManager.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseInstance.get()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddns::CloudDNSRecord.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorClient.get()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudnetworks::CloudNetwork.get()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeResponse.get()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeManager.get()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeEntity.get()'],['../classpyrax_1_1manager_1_1BaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::manager::BaseManager.get()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::queueing::QueueManager.get()'],['../classpyrax_1_1resource_1_1BaseResource.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::resource::BaseResource.get()']]],
+ ['get',['get',['../classpyrax_1_1Settings.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::Settings.get()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScalePolicy.get()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::autoscale::AutoScaleWebhook.get()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::base_identity::Endpoint.get()'],['../classpyrax_1_1client_1_1BaseClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::client::BaseClient.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseVolume.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseManager.get()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddatabases::CloudDatabaseInstance.get()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::clouddns::CloudDNSRecord.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.get()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudmonitoring::CloudMonitorClient.get()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::cloudnetworks::CloudNetwork.get()'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeResponse.get()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeManager.get()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::fakes::FakeEntity.get()'],['../classpyrax_1_1manager_1_1BaseManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::manager::BaseManager.get()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::ContainerManager.get()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageObject.get()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageObjectManager.get()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::object_storage::StorageClient.get()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::queueing::QueueManager.get()'],['../classpyrax_1_1resource_1_1BaseResource.html#a444a1328efb32d5d9d2dcb2efe855d3b',1,'pyrax::resource::BaseResource.get()']]],
['get_5fabsolute_5flimits',['get_absolute_limits',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#af5584781384edbc4caa037fbc9749092',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5faccess_5flist',['get_access_list',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_access_list()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a3aa1b2aa693e56eb9ff1535ca86c3c7c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_access_list()']]],
['get_5faccount',['get_account',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4d751385e14b90deacafe71308ee04dc',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['get_5faccount_5fmetadata',['get_account_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5faccount_5fdetails',['get_account_details',['../classpyrax_1_1object__storage_1_1StorageClient.html#a92e1f4d9ea3b9f1a4173a0c3cbb4b63f',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5faccount_5fheaders',['get_account_headers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#add5b3b9f6a80ebc276eefb5174977918',1,'pyrax::object_storage::ContainerManager']]],
+ ['get_5faccount_5finfo',['get_account_info',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae62cc3fbbe26d05e400f35268955c6ec',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5faccount_5fmetadata',['get_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::object_storage::ContainerManager.get_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1db54cea98fd675f9e1f88ebb4c14246',1,'pyrax::object_storage::StorageClient.get_account_metadata()']]],
['get_5falarm',['get_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorEntity.get_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a0efb17866082d1efd4697a8414e61d22',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_alarm()']]],
['get_5falgorithms',['get_algorithms',['../classpyrax_1_1fakes_1_1FakeService.html#a7945b394e6d2f570edf593cbe2b6b4e2',1,'pyrax::fakes::FakeService']]],
- ['get_5fall_5fcontainers',['get_all_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ae413c04282e2a1f584d7b99bbea09b54',1,'pyrax::cf_wrapper::client::CFClient']]],
['get_5faudits',['get_audits',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ad18caa6ffb1e5081c9aa71d04a434ce6',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fbackup',['get_backup',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a3a01f4e15e08d87606f2886455804879',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
+ ['get_5fcdn_5flog_5fretention',['get_cdn_log_retention',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a032dd6e08a1efb86d8f15bae01756e14',1,'pyrax::object_storage::ContainerManager.get_cdn_log_retention()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a032dd6e08a1efb86d8f15bae01756e14',1,'pyrax::object_storage::StorageClient.get_cdn_log_retention()']]],
+ ['get_5fcdn_5fmetadata',['get_cdn_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ad0b56aada104ce5c6e468708ba820dad',1,'pyrax::object_storage::ContainerManager']]],
['get_5fchangelogs',['get_changelogs',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a51cc4e0d1e3af50c4375eecd08e128dd',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fcheck',['get_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a663e1c9857cbc0bf083314e6404e976f',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a663e1c9857cbc0bf083314e6404e976f',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_check()']]],
['get_5fcheck_5ftype',['get_check_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4ec84467f00cf7b6b321984347025d14',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
@@ -19,13 +23,10 @@ var searchData=
['get_5fconfiguration',['get_configuration',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::ScalingGroup.get_configuration()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::ScalingGroupManager.get_configuration()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a4765b6651625ae1a9e0b6170c0cfe447',1,'pyrax::autoscale::AutoScaleClient.get_configuration()']]],
['get_5fconnection_5flogging',['get_connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab259705d7fd79cee133de68e9b29846b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_connection_logging()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab259705d7fd79cee133de68e9b29846b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_connection_logging()']]],
['get_5fconnection_5fthrottle',['get_connection_throttle',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_connection_throttle()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a3caddfe1f948f22c3926b810485bd645',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_connection_throttle()']]],
- ['get_5fcontainer',['get_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ade2af720b771c722f092076b29a0ef64',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fcdn_5fmetadata',['get_container_cdn_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aadba5878ace4bb8b6bb12584bd9d488e',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fios_5furi',['get_container_ios_uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fmetadata',['get_container_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af3f2bf8377401391d0fed1403d7ce1e1',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fobject_5fnames',['get_container_object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6104ca24badc598cb4f2e17f20cc7e07',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fobjects',['get_container_objects',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aaf73308b26a79abf34f31686698ce8fc',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fcontainer_5fstreaming_5furi',['get_container_streaming_uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a70834113917360c15a621ab652501c83',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5fcontainer_5fcdn_5fmetadata',['get_container_cdn_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#aadba5878ace4bb8b6bb12584bd9d488e',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fios_5furi',['get_container_ios_uri',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::object_storage::ContainerManager.get_container_ios_uri()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a45992fb368b33444540c4ac430d81184',1,'pyrax::object_storage::StorageClient.get_container_ios_uri()']]],
+ ['get_5fcontainer_5fmetadata',['get_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#af3f2bf8377401391d0fed1403d7ce1e1',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fstreaming_5furi',['get_container_streaming_uri',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a70834113917360c15a621ab652501c83',1,'pyrax::object_storage::ContainerManager.get_container_streaming_uri()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a70834113917360c15a621ab652501c83',1,'pyrax::object_storage::StorageClient.get_container_streaming_uri()']]],
['get_5fcontent_5fcaching',['get_content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a81bd711b5a3cfb2976088a62c9adc6e0',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_content_caching()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a81bd711b5a3cfb2976088a62c9adc6e0',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_content_caching()']]],
['get_5fdatabase',['get_database',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a88023cfc83e7c3c6343e1b37f1fb7f4f',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_database()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a88023cfc83e7c3c6343e1b37f1fb7f4f',1,'pyrax::clouddatabases::CloudDatabaseClient.get_database()']]],
['get_5fdefault_5fregion',['get_default_region',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aa48069d87e240c6f35caed1b76e8cb4e',1,'pyrax::base_identity::BaseIdentity']]],
@@ -36,7 +37,9 @@ var searchData=
['get_5fenvironment',['get_environment',['../namespacepyrax.html#a9850c29c666aa2f53d8ba560897855f8',1,'pyrax']]],
['get_5ferror_5fpage',['get_error_page',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a6504e1c0199cc9b8f58a3bf38eaf4f62',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_error_page()']]],
['get_5fextensions',['get_extensions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseIdentity']]],
+ ['get_5ffile_5fsize',['get_file_size',['../namespacepyrax_1_1object__storage.html#aa4c3e8f88a31bd0198ef93717b8446b5',1,'pyrax::object_storage']]],
['get_5fflavor',['get_flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5ef10110fd842db8ecae2798b08bdd5b',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
+ ['get_5fheaders',['get_headers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#aa3b7b8c653e87ceb81b5c42518ef70a1',1,'pyrax::object_storage::ContainerManager']]],
['get_5fhealth_5fmonitor',['get_health_monitor',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_health_monitor()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a882537f0d9ea2f375dca9ff59170532d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_health_monitor()']]],
['get_5fhome_5fdocument',['get_home_document',['../classpyrax_1_1queueing_1_1QueueClient.html#a97fc2eb61171be491fb16708763edf2c',1,'pyrax::queueing::QueueClient']]],
['get_5fhttp_5fdebug',['get_http_debug',['../namespacepyrax.html#a2766ee16854adf9575c29ac661f447fd',1,'pyrax']]],
@@ -48,12 +51,11 @@ var searchData=
['get_5fimage_5ftask_5fschema',['get_image_task_schema',['../classpyrax_1_1image_1_1ImageClient.html#aad7b95a357c65cfef55b2239b5218c1e',1,'pyrax::image::ImageClient']]],
['get_5fimage_5ftasks_5fschema',['get_image_tasks_schema',['../classpyrax_1_1image_1_1ImageClient.html#a4b69d6b1d1f498049686b1a9c8edd6e2',1,'pyrax::image::ImageClient']]],
['get_5fimages_5fschema',['get_images_schema',['../classpyrax_1_1image_1_1ImageClient.html#a58ba7c3876964cb379d308c3f7f96606',1,'pyrax::image::ImageClient']]],
- ['get_5finfo',['get_info',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a384aea54f97656a3742b60bae861bc34',1,'pyrax::cf_wrapper::client::CFClient']]],
['get_5flaunch_5fconfig',['get_launch_config',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::ScalingGroup.get_launch_config()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::ScalingGroupManager.get_launch_config()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ae370445e311ea96ab9b0bdfbc3eafa38',1,'pyrax::autoscale::AutoScaleClient.get_launch_config()']]],
['get_5flimits',['get_limits',['../classpyrax_1_1client_1_1BaseClient.html#ab5ef84a0682afc9a357f6e76b15f1640',1,'pyrax::client::BaseClient.get_limits()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ab5ef84a0682afc9a357f6e76b15f1640',1,'pyrax::clouddatabases::CloudDatabaseClient.get_limits()']]],
['get_5fmember',['get_member',['../classpyrax_1_1image_1_1Image.html#ac120fa8b5717fbd7a6b77c489294a8ea',1,'pyrax::image::Image']]],
['get_5fmessage',['get_message',['../classpyrax_1_1queueing_1_1Queue.html#a56468e8bf0910ac8be0def8886f1feae',1,'pyrax::queueing::Queue.get_message()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a56468e8bf0910ac8be0def8886f1feae',1,'pyrax::queueing::QueueClient.get_message()']]],
- ['get_5fmetadata',['get_metadata',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cf_wrapper::container::Container.get_metadata()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cf_wrapper::storage_object::StorageObject.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::Node.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueClient.get_metadata()']]],
+ ['get_5fmetadata',['get_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::Node.get_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata()'],['../classpyrax_1_1object__storage_1_1Container.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::Container.get_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::ContainerManager.get_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::StorageObject.get_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::object_storage::StorageObjectManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueManager.get_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#abc9975b34823bfba383eb240ecde3783',1,'pyrax::queueing::QueueClient.get_metadata()']]],
['get_5fmetadata_5ffor_5fnode',['get_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#aebfb9c2caec7532153b2558fe14347cf',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aebfb9c2caec7532153b2558fe14347cf',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_metadata_for_node()']]],
['get_5fmetric_5fdata_5fpoints',['get_metric_data_points',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorEntity.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorCheck.get_metric_data_points()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a58698bf0d5e72dc683fcf9384d110d69',1,'pyrax::cloudmonitoring::CloudMonitorClient.get_metric_data_points()']]],
['get_5fmonitoring_5fzone',['get_monitoring_zone',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a264e06827aca6792c0bb9342703b90f6',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
@@ -62,10 +64,8 @@ var searchData=
['get_5fnotification',['get_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a1bb5691ae7d569885d7ccfda53ccf269',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fnotification_5fplan',['get_notification_plan',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4cacea89acad7d3a81d2c454b7898918',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fnotification_5ftype',['get_notification_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a26c32a682d8efbdfd220d8bd9847b35c',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
- ['get_5fobject',['get_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::cf_wrapper::client::CFClient.get_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::cf_wrapper::container::Container.get_object()']]],
- ['get_5fobject_5fmetadata',['get_object_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fobject_5fnames',['get_object_names',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a1ffef9ff929707223146f6c5373e2a14',1,'pyrax::cf_wrapper::container::Container']]],
- ['get_5fobjects',['get_objects',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ace264467ad390fd60316148647ce727d',1,'pyrax::cf_wrapper::container::Container']]],
+ ['get_5fobject',['get_object',['../classpyrax_1_1object__storage_1_1Container.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::Container.get_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::ContainerManager.get_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af1075eab57e4a3c67fe8d474080407a8',1,'pyrax::object_storage::StorageClient.get_object()']]],
+ ['get_5fobject_5fmetadata',['get_object_metadata',['../classpyrax_1_1object__storage_1_1Container.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::Container.get_object_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::ContainerManager.get_object_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a14818405852da98a0911326ab3277d1c',1,'pyrax::object_storage::StorageClient.get_object_metadata()']]],
['get_5foverview',['get_overview',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a795c88c7d05f125834f1b18a1cb3bcae',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fpassword',['get_password',['../classpyrax_1_1fakes_1_1FakeKeyring.html#a48a79cc5ff03eeb62e93ea1a1e6cf3c2',1,'pyrax::fakes::FakeKeyring']]],
['get_5fpng_5fcontent',['get_png_content',['../namespacepyrax_1_1fakes.html#acd6c70ae08c49befef3454e39deadf89',1,'pyrax::fakes']]],
@@ -81,17 +81,17 @@ var searchData=
['get_5fsnapshot',['get_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a10f46ed85249ae2f94a60635077c8f58',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['get_5fssl_5ftermination',['get_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#adbf49e882fc9a7b55f38fd6213440d50',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_ssl_termination()']]],
['get_5fstate',['get_state',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::ScalingGroup.get_state()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::ScalingGroupManager.get_state()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#adc4030ba0851f007b904cc254c2cb489',1,'pyrax::autoscale::AutoScaleClient.get_state()']]],
- ['get_5fstats',['get_stats',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueClient.get_stats()']]],
+ ['get_5fstats',['get_stats',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_stats()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueManager.get_stats()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a46cdb2ba90b6fff4c5cf4d76ae0a1697',1,'pyrax::queueing::QueueClient.get_stats()']]],
['get_5fsubdomain_5fiterator',['get_subdomain_iterator',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ac532463e7fb1cbb0a17181a816460adc',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5ftask',['get_task',['../classpyrax_1_1image_1_1ImageClient.html#afee695a4e20aed685a098809a699f5ea',1,'pyrax::image::ImageClient']]],
- ['get_5ftemp_5furl',['get_temp_url',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::client::CFClient.get_temp_url()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::container::Container.get_temp_url()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::cf_wrapper::storage_object::StorageObject.get_temp_url()']]],
- ['get_5ftemp_5furl_5fkey',['get_temp_url_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a80f3fd33724985de91d7930036344668',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5ftemp_5furl',['get_temp_url',['../classpyrax_1_1object__storage_1_1Container.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::Container.get_temp_url()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::ContainerManager.get_temp_url()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::StorageObject.get_temp_url()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a26cd51b10d04d2f632fc6f12fa2e3b43',1,'pyrax::object_storage::StorageClient.get_temp_url()']]],
+ ['get_5ftemp_5furl_5fkey',['get_temp_url_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a80f3fd33724985de91d7930036344668',1,'pyrax::object_storage::StorageClient']]],
['get_5ftenant',['get_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a5032718366de2e9b6b60077fdf882ce7',1,'pyrax::base_identity::BaseIdentity']]],
['get_5ftimings',['get_timings',['../classpyrax_1_1client_1_1BaseClient.html#ac6afa2de729057e4864e897292b3f9cb',1,'pyrax::client::BaseClient']]],
['get_5ftoken',['get_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::base_identity::BaseIdentity.get_token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::fakes::FakeIdentity.get_token()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::service_catalog::ServiceCatalog.get_token()']]],
['get_5ftoken_5fendpoints',['get_token_endpoints',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aeab174eb893dbbd0e84bfa5101e9e9a1',1,'pyrax::base_identity::BaseIdentity']]],
['get_5ftype',['get_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a0ef321a485de87e39ea78ebd3ba31b23',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager']]],
- ['get_5fuploaded',['get_uploaded',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a537487e2f2dabc8103e2006739cbeb0e',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['get_5fuploaded',['get_uploaded',['../classpyrax_1_1object__storage_1_1StorageClient.html#a537487e2f2dabc8103e2006739cbeb0e',1,'pyrax::object_storage::StorageClient']]],
['get_5fusage',['get_usage',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.get_usage()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_usage()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_usage()'],['../classpyrax_1_1fakes_1_1FakeService.html#a7a26606bf20204d1650ddad60fb25a3b',1,'pyrax::fakes::FakeService.get_usage()']]],
['get_5fuser',['get_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::base_identity::BaseIdentity.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseClient.get_user()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::identity::rax_identity::RaxIdentity.get_user()']]],
['get_5fwebhook',['get_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::ScalingGroupManager.get_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::AutoScalePolicy.get_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a2d724ad561fe9d53d1cbf1a86ecf5bfa',1,'pyrax::autoscale::AutoScaleClient.get_webhook()']]],
diff --git a/docs/html/search/functions_68.js b/docs/html/search/functions_68.js
index f4258592..b683d459 100644
--- a/docs/html/search/functions_68.js
+++ b/docs/html/search/functions_68.js
@@ -1,6 +1,5 @@
var searchData=
[
- ['handle_5fswiftclient_5fexception',['handle_swiftclient_exception',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aed48921b20ac7d5d1bf17dae8e2f971d',1,'pyrax::cf_wrapper::client']]],
['head',['head',['../classpyrax_1_1manager_1_1BaseManager.html#a6ffb8c9775dd06f2a95c5be870862051',1,'pyrax::manager::BaseManager']]],
['http_5flog_5freq',['http_log_req',['../namespacepyrax_1_1http.html#aff71c1b3b5d2f16e608995f526e4d531',1,'pyrax::http']]],
['http_5flog_5fresp',['http_log_resp',['../namespacepyrax_1_1http.html#ad5a5ea82cd563be6d489571f5b79ecb2',1,'pyrax::http']]],
diff --git a/docs/html/search/functions_69.js b/docs/html/search/functions_69.js
index 9ae61fc8..cdd9cd39 100644
--- a/docs/html/search/functions_69.js
+++ b/docs/html/search/functions_69.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['id',['id',['../classpyrax_1_1image_1_1ImageMember.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::image::ImageMember.id()'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id']]],
+ ['id',['id',['../classpyrax_1_1image_1_1ImageMember.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::image::ImageMember.id()'],['../classpyrax_1_1object__storage_1_1Container.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::object_storage::Container.id()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::object_storage::StorageObject.id()'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id'],['../classpyrax_1_1queueing_1_1Queue.html#a35d1e2c2471fb3f05e6abe42bb74d25a',1,'pyrax::queueing::Queue.id']]],
['image',['image',['../classpyrax_1_1image_1_1JSONSchemaManager.html#a158190a19ec0f4a9517b4193ccd7a645',1,'pyrax::image::JSONSchemaManager']]],
['image_5fmember',['image_member',['../classpyrax_1_1image_1_1JSONSchemaManager.html#a94084218ef6906befc5ac34ddf99c0d8',1,'pyrax::image::JSONSchemaManager']]],
['image_5fmembers',['image_members',['../classpyrax_1_1image_1_1JSONSchemaManager.html#aab020e3f43050d85a5c61c489455963c',1,'pyrax::image::JSONSchemaManager']]],
diff --git a/docs/html/search/functions_6c.js b/docs/html/search/functions_6c.js
index 79ff8400..b929ff24 100644
--- a/docs/html/search/functions_6c.js
+++ b/docs/html/search/functions_6c.js
@@ -1,16 +1,18 @@
var searchData=
[
- ['list',['list',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cf_wrapper::client::CFClient.list()'],['../classpyrax_1_1client_1_1BaseClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::client::BaseClient.list()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackupManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddatabases::CloudDatabaseBackupManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSClient.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorChangelogManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorChangelogManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorOverviewManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorOverviewManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeManager.list()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeEntity.list()'],['../classpyrax_1_1image_1_1ImageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageManager.list()'],['../classpyrax_1_1image_1_1ImageClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageClient.list()'],['../classpyrax_1_1manager_1_1BaseManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::manager::BaseManager.list()'],['../classpyrax_1_1queueing_1_1Queue.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::Queue.list()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::QueueMessageManager.list()']]],
+ ['list',['list',['../classpyrax_1_1client_1_1BaseClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::client::BaseClient.list()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackupManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddatabases::CloudDatabaseBackupManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSManager.list()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::clouddns::CloudDNSClient.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorChangelogManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorChangelogManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorOverviewManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorOverviewManager.list()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list()'],['../classpyrax_1_1fakes_1_1FakeManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeManager.list()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::fakes::FakeEntity.list()'],['../classpyrax_1_1image_1_1ImageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageManager.list()'],['../classpyrax_1_1image_1_1ImageClient.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::image::ImageClient.list()'],['../classpyrax_1_1manager_1_1BaseManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::manager::BaseManager.list()'],['../classpyrax_1_1object__storage_1_1Container.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::object_storage::Container.list()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::object_storage::StorageObjectManager.list()'],['../classpyrax_1_1queueing_1_1Queue.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::Queue.list()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#a9b522b4ef7526bfa60b78fe735caa55c',1,'pyrax::queueing::QueueMessageManager.list()']]],
['list_5falarms',['list_alarms',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorEntity.list_alarms()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.list_alarms()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aba03029cc0b951e300763dfb7b374b8f',1,'pyrax::cloudmonitoring::CloudMonitorClient.list_alarms()']]],
- ['list_5fall',['list_all',['../classpyrax_1_1image_1_1ImageManager.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageManager.list_all()'],['../classpyrax_1_1image_1_1ImageClient.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageClient.list_all()']]],
+ ['list_5fall',['list_all',['../classpyrax_1_1image_1_1ImageManager.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageManager.list_all()'],['../classpyrax_1_1image_1_1ImageClient.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::image::ImageClient.list_all()'],['../classpyrax_1_1object__storage_1_1Container.html#a28f5fede14b6bf699c5aa34dfa64f126',1,'pyrax::object_storage::Container.list_all()']]],
['list_5fbackups',['list_backups',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseManager.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseManager.list_backups()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_backups()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a0ed9ce14a6eafbfe306e55f0b1c8b218',1,'pyrax::clouddatabases::CloudDatabaseClient.list_backups()']]],
['list_5fby_5fclaim',['list_by_claim',['../classpyrax_1_1queueing_1_1Queue.html#ac7bd1cb861452925a16e74d9b6aafd43',1,'pyrax::queueing::Queue']]],
['list_5fby_5fids',['list_by_ids',['../classpyrax_1_1queueing_1_1Queue.html#ae6ec4aa7bb7da740187a3039da271f47',1,'pyrax::queueing::Queue.list_by_ids()'],['../classpyrax_1_1queueing_1_1QueueMessageManager.html#ae6ec4aa7bb7da740187a3039da271f47',1,'pyrax::queueing::QueueMessageManager.list_by_ids()']]],
['list_5fcheck_5ftypes',['list_check_types',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a360142ff4cbb495a8e5ba41b9c810a8b',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fchecks',['list_checks',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorEntity.list_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.list_checks()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#aedd0a1ae642c3f9e56df9bb5a1e1384c',1,'pyrax::cloudmonitoring::CloudMonitorClient.list_checks()']]],
- ['list_5fcontainer_5fsubdirs',['list_container_subdirs',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a67a23cb99d99eb7027e487e506cf68f6',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainers',['list_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a43f33f69f2026d24a426ce6f6cdc11f9',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainers_5finfo',['list_containers_info',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['list_5fcontainer_5fnames',['list_container_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#ab8c492737b62608beef73a96049d41c3',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fobject_5fnames',['list_container_object_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac5bb09c888b0a2c33adf2d893dce292d',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fobjects',['list_container_objects',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5b8161bbcbb76c6cfd393df6214c63c6',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainer_5fsubdirs',['list_container_subdirs',['../classpyrax_1_1object__storage_1_1StorageClient.html#a67a23cb99d99eb7027e487e506cf68f6',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fcontainers_5finfo',['list_containers_info',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::object_storage::ContainerManager.list_containers_info()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ac56c2c448f1e4c975621d2921bfb1e9c',1,'pyrax::object_storage::StorageClient.list_containers_info()']]],
['list_5fcredentials',['list_credentials',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a752ff9d933b98fdeb87b51a7409f6d4a',1,'pyrax::base_identity::BaseIdentity']]],
['list_5fdatabases',['list_databases',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#ae180be633edf68a4a6599e8c64310c5f',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_databases()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#ae180be633edf68a4a6599e8c64310c5f',1,'pyrax::clouddatabases::CloudDatabaseClient.list_databases()']]],
['list_5fentities',['list_entities',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a03cd18f945d37d5cb1e0dc666b23ed3a',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
@@ -27,17 +29,19 @@ var searchData=
['list_5fnotification_5fplans',['list_notification_plans',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab92b8049f19f558a86a40457f9834d5e',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fnotification_5ftypes',['list_notification_types',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#adafe19263bf8b2cd365c36b887911fdb',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['list_5fnotifications',['list_notifications',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab41b40cc23d232c8f4839759ae7fb69f',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
+ ['list_5fobject_5fnames',['list_object_names',['../classpyrax_1_1object__storage_1_1Container.html#a49ab4f3aa93742019d4ec773d709e750',1,'pyrax::object_storage::Container.list_object_names()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a49ab4f3aa93742019d4ec773d709e750',1,'pyrax::object_storage::ContainerManager.list_object_names()']]],
+ ['list_5fobjects',['list_objects',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a50ad99b37507a84058d8ca95e01b964c',1,'pyrax::object_storage::ContainerManager']]],
['list_5fpolicies',['list_policies',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::ScalingGroup.list_policies()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::ScalingGroupManager.list_policies()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a2a31cdad32539c5616c914d25747a74a',1,'pyrax::autoscale::AutoScaleClient.list_policies()']]],
['list_5fprevious_5fpage',['list_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#aa4b6fcc0a8d9e480ddda1300e9e44322',1,'pyrax::clouddns::CloudDNSManager.list_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#aa4b6fcc0a8d9e480ddda1300e9e44322',1,'pyrax::clouddns::CloudDNSClient.list_previous_page()']]],
['list_5fptr_5frecords',['list_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a50a310b1ef2863a2e7090f31782a67cc',1,'pyrax::clouddns::CloudDNSManager.list_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a50a310b1ef2863a2e7090f31782a67cc',1,'pyrax::clouddns::CloudDNSClient.list_ptr_records()']]],
- ['list_5fpublic_5fcontainers',['list_public_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['list_5fpublic_5fcontainers',['list_public_containers',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::object_storage::ContainerManager.list_public_containers()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a34c1b3aa7e651b23e470f5c42d6011df',1,'pyrax::object_storage::StorageClient.list_public_containers()']]],
['list_5frecords',['list_records',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSDomain.list_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSManager.list_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a149cdef5a1614632e2ae1605f4d81e54',1,'pyrax::clouddns::CloudDNSClient.list_records()']]],
['list_5frecords_5fnext_5fpage',['list_records_next_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a9433b9835b889f167ade546f6d545de7',1,'pyrax::clouddns::CloudDNSManager.list_records_next_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a9433b9835b889f167ade546f6d545de7',1,'pyrax::clouddns::CloudDNSClient.list_records_next_page()']]],
['list_5frecords_5fprevious_5fpage',['list_records_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a4864d421a328bb3bff21e312046fe96f',1,'pyrax::clouddns::CloudDNSManager.list_records_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a4864d421a328bb3bff21e312046fe96f',1,'pyrax::clouddns::CloudDNSClient.list_records_previous_page()']]],
['list_5froles',['list_roles',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a07d99fc2a1f4be72dc4ff0860bfbc7d3',1,'pyrax::base_identity::BaseIdentity']]],
['list_5froles_5ffor_5fuser',['list_roles_for_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aea771492a5203856177387a1d626fc8b',1,'pyrax::base_identity::BaseIdentity']]],
['list_5fsnapshots',['list_snapshots',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageVolume.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageVolume.list_snapshots()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.list_snapshots()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a00cc0e02f5f5345225175cad0120c697',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.list_snapshots()']]],
- ['list_5fsubdirs',['list_subdirs',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::cf_wrapper::container::Container']]],
+ ['list_5fsubdirs',['list_subdirs',['../classpyrax_1_1object__storage_1_1Container.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::object_storage::Container.list_subdirs()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a3da53c909075fab5c230e40d5aab4e51',1,'pyrax::object_storage::ContainerManager.list_subdirs()']]],
['list_5fsubdomains',['list_subdomains',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSDomain.list_subdomains()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSManager.list_subdomains()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#aed23d59df183654056d1a43fbcd4b59b',1,'pyrax::clouddns::CloudDNSClient.list_subdomains()']]],
['list_5fsubdomains_5fnext_5fpage',['list_subdomains_next_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a4cffcbdbfac87c7985652d22759effcf',1,'pyrax::clouddns::CloudDNSManager.list_subdomains_next_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a4cffcbdbfac87c7985652d22759effcf',1,'pyrax::clouddns::CloudDNSClient.list_subdomains_next_page()']]],
['list_5fsubdomains_5fprevious_5fpage',['list_subdomains_previous_page',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a809ef53848e0cee67182feb9fdf64a18',1,'pyrax::clouddns::CloudDNSManager.list_subdomains_previous_page()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a809ef53848e0cee67182feb9fdf64a18',1,'pyrax::clouddns::CloudDNSClient.list_subdomains_previous_page()']]],
diff --git a/docs/html/search/functions_6d.js b/docs/html/search/functions_6d.js
index 858c07a9..2751f395 100644
--- a/docs/html/search/functions_6d.js
+++ b/docs/html/search/functions_6d.js
@@ -1,9 +1,9 @@
var searchData=
[
- ['make_5fcontainer_5fprivate',['make_container_private',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac914c041451eac23012b690573972119',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['make_5fcontainer_5fpublic',['make_container_public',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a76f191980ae586a885256c95f681b3c5',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['make_5fprivate',['make_private',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::cf_wrapper::container::Container']]],
- ['make_5fpublic',['make_public',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::cf_wrapper::container::Container']]],
+ ['make_5fcontainer_5fprivate',['make_container_private',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac914c041451eac23012b690573972119',1,'pyrax::object_storage::StorageClient']]],
+ ['make_5fcontainer_5fpublic',['make_container_public',['../classpyrax_1_1object__storage_1_1StorageClient.html#a76f191980ae586a885256c95f681b3c5',1,'pyrax::object_storage::StorageClient']]],
+ ['make_5fprivate',['make_private',['../classpyrax_1_1object__storage_1_1Container.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::object_storage::Container.make_private()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ae4ca302cb84a4ecfc7418e4aa129a4ac',1,'pyrax::object_storage::ContainerManager.make_private()']]],
+ ['make_5fpublic',['make_public',['../classpyrax_1_1object__storage_1_1Container.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::object_storage::Container.make_public()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a800f9f6744c62cf60897710ef2c9d1b1',1,'pyrax::object_storage::ContainerManager.make_public()']]],
['match_5fpattern',['match_pattern',['../namespacepyrax_1_1utils.html#ab32790e8c29f35cd0c810dd86dedba2c',1,'pyrax::utils']]],
['max_5fentities',['max_entities',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a68ed3a21e0314dc3b7d6e1ac6db90d',1,'pyrax::autoscale::ScalingGroup.max_entities'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2a68ed3a21e0314dc3b7d6e1ac6db90d',1,'pyrax::autoscale::ScalingGroup.max_entities']]],
['metadata',['metadata',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2fe8c1ec91a77ed22c86049d4ffef3f4',1,'pyrax::autoscale::ScalingGroup.metadata'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a2fe8c1ec91a77ed22c86049d4ffef3f4',1,'pyrax::autoscale::ScalingGroup.metadata']]],
@@ -14,6 +14,6 @@ var searchData=
['method_5fpost',['method_post',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::base_identity::BaseIdentity.method_post()'],['../classpyrax_1_1client_1_1BaseClient.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::client::BaseClient.method_post()']]],
['method_5fput',['method_put',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::base_identity::BaseIdentity.method_put()'],['../classpyrax_1_1client_1_1BaseClient.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::client::BaseClient.method_put()']]],
['min_5fentities',['min_entities',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a395e6beed5694f7d60ea9657d57e9ad0',1,'pyrax::autoscale::ScalingGroup.min_entities'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a395e6beed5694f7d60ea9657d57e9ad0',1,'pyrax::autoscale::ScalingGroup.min_entities']]],
- ['move',['move',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#af348e10e4e4162711ceedc9841276eb4',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['move_5fobject',['move_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::cf_wrapper::client::CFClient.move_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::cf_wrapper::container::Container.move_object()']]]
+ ['move',['move',['../classpyrax_1_1object__storage_1_1StorageObject.html#af348e10e4e4162711ceedc9841276eb4',1,'pyrax::object_storage::StorageObject']]],
+ ['move_5fobject',['move_object',['../classpyrax_1_1object__storage_1_1Container.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::Container.move_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::ContainerManager.move_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a536af175d76546af80d86eda21eaaccc',1,'pyrax::object_storage::StorageClient.move_object()']]]
];
diff --git a/docs/html/search/functions_6e.js b/docs/html/search/functions_6e.js
index 289704c4..7108bc6a 100644
--- a/docs/html/search/functions_6e.js
+++ b/docs/html/search/functions_6e.js
@@ -1,5 +1,5 @@
var searchData=
[
- ['name',['name',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorEntity.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorCheck.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorZone.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorZone.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotification.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationType.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationType.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlan.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlan.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.name()']]],
- ['next',['next',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::clouddns::ResultsIterator']]]
+ ['name',['name',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::autoscale::ScalingGroup.name'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorEntity.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorCheck.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorZone.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorZone.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotification.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationType.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationType.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationPlan.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorNotificationPlan.name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.name()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a757840459670ee7692e00cf5ddc722d5',1,'pyrax::object_storage::StorageObjectManager.name()']]],
+ ['next',['next',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::clouddns::ResultsIterator.next()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a1add561a14f78ba11ea73195789b60da',1,'pyrax::utils::ResultsIterator.next()']]]
];
diff --git a/docs/html/search/functions_6f.js b/docs/html/search/functions_6f.js
index 864fb27e..6063e00d 100644
--- a/docs/html/search/functions_6f.js
+++ b/docs/html/search/functions_6f.js
@@ -1,5 +1,5 @@
var searchData=
[
- ['object_5fmeta_5fprefix',['object_meta_prefix',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a338bd59cd31829ed127f9a1da87e44cb',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['object_5flisting_5fiterator',['object_listing_iterator',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a72ce5f16b7dbe9364cc8785e6971295d',1,'pyrax::object_storage::ContainerManager.object_listing_iterator()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a72ce5f16b7dbe9364cc8785e6971295d',1,'pyrax::object_storage::StorageClient.object_listing_iterator()']]],
['optional_5ffield_5fnames',['optional_field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#aa8cda2e75b38e5edd7137e5e3b6a631b',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]]
];
diff --git a/docs/html/search/functions_70.js b/docs/html/search/functions_70.js
index c6168a87..2f252574 100644
--- a/docs/html/search/functions_70.js
+++ b/docs/html/search/functions_70.js
@@ -2,11 +2,10 @@ var searchData=
[
['params_5fto_5fdict',['params_to_dict',['../namespacepyrax_1_1utils.html#a9829217a17004ff879dffa75d60842ae',1,'pyrax::utils']]],
['pause',['pause',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::ScalingGroup.pause()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::ScalingGroupManager.pause()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ad87957c5b208fe27e24a5260f5ddbb95',1,'pyrax::autoscale::AutoScaleClient.pause()']]],
- ['plug_5fhole_5fin_5fswiftclient_5fauth',['plug_hole_in_swiftclient_auth',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a94ea8f5263f48d8194254f6e52c9a00a',1,'pyrax::cf_wrapper::client']]],
['policy_5fcount',['policy_count',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a221c84e10c0ca6bc4f240b139076bf4d',1,'pyrax::autoscale::ScalingGroup']]],
['post_5fmessage',['post_message',['../classpyrax_1_1queueing_1_1Queue.html#a6ccb26d9187a005281b0342f7eb995ca',1,'pyrax::queueing::Queue.post_message()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a6ccb26d9187a005281b0342f7eb995ca',1,'pyrax::queueing::QueueClient.post_message()']]],
['projectid',['projectid',['../classpyrax_1_1client_1_1BaseClient.html#af6e68e7b4a48c30549646fd3d5ed1aae',1,'pyrax::client::BaseClient']]],
['protocols',['protocols',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a7ffc66e16cbb4a549e7874dce9d61e6e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient']]],
- ['purge',['purge',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
- ['purge_5fcdn_5fobject',['purge_cdn_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::cf_wrapper::client::CFClient']]]
+ ['purge',['purge',['../classpyrax_1_1object__storage_1_1StorageObject.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::object_storage::StorageObject.purge()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a24447386d5cd26a6a61fd75fd19842c7',1,'pyrax::object_storage::StorageObjectManager.purge()']]],
+ ['purge_5fcdn_5fobject',['purge_cdn_object',['../classpyrax_1_1object__storage_1_1Container.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::Container.purge_cdn_object()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::ContainerManager.purge_cdn_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a1297ecd42c38ea798a22aa3fbede40a2',1,'pyrax::object_storage::StorageClient.purge_cdn_object()']]]
];
diff --git a/docs/html/search/functions_72.js b/docs/html/search/functions_72.js
index ac33bf9c..7fd72ea1 100644
--- a/docs/html/search/functions_72.js
+++ b/docs/html/search/functions_72.js
@@ -6,11 +6,11 @@ var searchData=
['read_5fconfig',['read_config',['../classpyrax_1_1Settings.html#a53943930dc298ed49aa0950b4898bb65',1,'pyrax::Settings']]],
['regions',['regions',['../classpyrax_1_1base__identity_1_1Service.html#ae31aaf8562119e7e06a2812c12b5a5ca',1,'pyrax::base_identity::Service']]],
['release_5fclaim',['release_claim',['../classpyrax_1_1queueing_1_1Queue.html#a72572b2049988d314b2943909f1a3284',1,'pyrax::queueing::Queue.release_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72572b2049988d314b2943909f1a3284',1,'pyrax::queueing::QueueClient.release_claim()']]],
- ['remove_5fcontainer_5ffrom_5fcache',['remove_container_from_cache',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a71217dd504682153d8dbbd8bd84eed56',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['remove_5fcontainer_5fmetadata_5fkey',['remove_container_metadata_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a91fcdf99119a696e0b626957628605bb',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['remove_5ffrom_5fcache',['remove_from_cache',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#adf3d192d83c2f53a96b0bd594c15b84d',1,'pyrax::cf_wrapper::container::Container']]],
- ['remove_5fmetadata_5fkey',['remove_metadata_key',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::cf_wrapper::container::Container.remove_metadata_key()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::cf_wrapper::storage_object::StorageObject.remove_metadata_key()']]],
- ['remove_5fobject_5fmetadata_5fkey',['remove_object_metadata_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ac3072e2b9369e7435f660ff89ae85aa5',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['remove_5fcontainer_5ffrom_5fcache',['remove_container_from_cache',['../classpyrax_1_1object__storage_1_1StorageClient.html#a71217dd504682153d8dbbd8bd84eed56',1,'pyrax::object_storage::StorageClient']]],
+ ['remove_5fcontainer_5fmetadata_5fkey',['remove_container_metadata_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a91fcdf99119a696e0b626957628605bb',1,'pyrax::object_storage::StorageClient']]],
+ ['remove_5ffrom_5fcache',['remove_from_cache',['../classpyrax_1_1object__storage_1_1Container.html#adf3d192d83c2f53a96b0bd594c15b84d',1,'pyrax::object_storage::Container']]],
+ ['remove_5fmetadata_5fkey',['remove_metadata_key',['../classpyrax_1_1object__storage_1_1Container.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::Container.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::ContainerManager.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::StorageObject.remove_metadata_key()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a01a67fdfd99526a56bef1e3c0a01a68d',1,'pyrax::object_storage::StorageObjectManager.remove_metadata_key()']]],
+ ['remove_5fobject_5fmetadata_5fkey',['remove_object_metadata_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#ac3072e2b9369e7435f660ff89ae85aa5',1,'pyrax::object_storage::StorageClient']]],
['replace',['replace',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#ab285a64f9f3fb8e2efb536e440b34466',1,'pyrax::autoscale::ScalingGroupManager.replace()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#ab285a64f9f3fb8e2efb536e440b34466',1,'pyrax::autoscale::AutoScaleClient.replace()']]],
['replace_5flaunch_5fconfig',['replace_launch_config',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a851fe41ce6befc7dd1b0a3f98328bbda',1,'pyrax::autoscale::ScalingGroupManager.replace_launch_config()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a851fe41ce6befc7dd1b0a3f98328bbda',1,'pyrax::autoscale::AutoScaleClient.replace_launch_config()']]],
['replace_5fpolicy',['replace_policy',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a4aea046272a0a459df2cc40ba2ee4d21',1,'pyrax::autoscale::ScalingGroupManager.replace_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a4aea046272a0a459df2cc40ba2ee4d21',1,'pyrax::autoscale::AutoScaleClient.replace_policy()']]],
@@ -28,7 +28,7 @@ var searchData=
['revoke_5fuser_5faccess',['revoke_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseUserManager.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseInstance.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseUser.revoke_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a37c095a57f86b13406baed47d9cc1dd2',1,'pyrax::clouddatabases::CloudDatabaseClient.revoke_user_access()']]],
['rfc2822_5fformat',['rfc2822_format',['../namespacepyrax_1_1utils.html#a6ea62353ce94e3d28ad8f6cae3e2ec5f',1,'pyrax::utils']]],
['root_5fuser_5fstatus',['root_user_status',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a269cc22e852b374875720085d24b9922',1,'pyrax::clouddatabases::CloudDatabaseInstance.root_user_status()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a269cc22e852b374875720085d24b9922',1,'pyrax::clouddatabases::CloudDatabaseClient.root_user_status()']]],
- ['run',['run',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::cf_wrapper::client::FolderUploader.run()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::cf_wrapper::client::BulkDeleter.run()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::utils::_WaitThread.run()']]],
+ ['run',['run',['../classpyrax_1_1object__storage_1_1FolderUploader.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::object_storage::FolderUploader.run()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::object_storage::BulkDeleter.run()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aedcaade7dd45761ddcc3b3cc07005314',1,'pyrax::utils::_WaitThread.run()']]],
['run_5fhooks',['run_hooks',['../classpyrax_1_1manager_1_1BaseManager.html#aac4d6a908dd774f73e389ad2b14b6968',1,'pyrax::manager::BaseManager']]],
['runproc',['runproc',['../namespacepyrax_1_1utils.html#a246bab6cd0c9c356c323014ce9724a72',1,'pyrax::utils']]]
];
diff --git a/docs/html/search/functions_73.js b/docs/html/search/functions_73.js
index c4a08c6d..18055a09 100644
--- a/docs/html/search/functions_73.js
+++ b/docs/html/search/functions_73.js
@@ -3,13 +3,14 @@ var searchData=
['safe_5fissubclass',['safe_issubclass',['../namespacepyrax_1_1utils.html#ab35ae0f6f47300275663bd32a957c5f2',1,'pyrax::utils']]],
['search_5frecords',['search_records',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ae7afc3edf5d837708e01cfa202d748b6',1,'pyrax::clouddns::CloudDNSDomain.search_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#ae7afc3edf5d837708e01cfa202d748b6',1,'pyrax::clouddns::CloudDNSManager.search_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ae7afc3edf5d837708e01cfa202d748b6',1,'pyrax::clouddns::CloudDNSClient.search_records()']]],
['set',['set',['../classpyrax_1_1Settings.html#a621bd5e22d03cc48dbb784427b1c0fd8',1,'pyrax::Settings']]],
- ['set_5faccount_5fmetadata',['set_account_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcdn_5flog_5fretention',['set_cdn_log_retention',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5faccount_5fmetadata',['set_account_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::object_storage::ContainerManager.set_account_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ab38bbe7b6c0330ae9d0a768197b36a6c',1,'pyrax::object_storage::StorageClient.set_account_metadata()']]],
+ ['set_5fcdn_5flog_5fretention',['set_cdn_log_retention',['../classpyrax_1_1object__storage_1_1ContainerManager.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::object_storage::ContainerManager.set_cdn_log_retention()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#ace22bfd2ecdbf455cdf010b53b1d3d90',1,'pyrax::object_storage::StorageClient.set_cdn_log_retention()']]],
+ ['set_5fcdn_5fmetadata',['set_cdn_metadata',['../classpyrax_1_1object__storage_1_1ContainerManager.html#a168b21283d8328937f992993deec1f07',1,'pyrax::object_storage::ContainerManager']]],
['set_5fconnection_5flogging',['set_connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abac1dc72ddbe8369a8850b34e321f7db',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_connection_logging()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abac1dc72ddbe8369a8850b34e321f7db',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_connection_logging()']]],
- ['set_5fcontainer_5fcdn_5fmetadata',['set_container_cdn_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#ab7d776a936c5feb8be88dc9d9e199337',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fmetadata',['set_container_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a4bb2698330c6d409640337b1a80e16bf',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fweb_5ferror_5fpage',['set_container_web_error_page',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a5929bb83681725ad6e24fa49acae2a15',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['set_5fcontainer_5fweb_5findex_5fpage',['set_container_web_index_page',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a77469aa965e7df1c81ad902bea324a36',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5fcontainer_5fcdn_5fmetadata',['set_container_cdn_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#ab7d776a936c5feb8be88dc9d9e199337',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fmetadata',['set_container_metadata',['../classpyrax_1_1object__storage_1_1StorageClient.html#a4bb2698330c6d409640337b1a80e16bf',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fweb_5ferror_5fpage',['set_container_web_error_page',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5929bb83681725ad6e24fa49acae2a15',1,'pyrax::object_storage::StorageClient']]],
+ ['set_5fcontainer_5fweb_5findex_5fpage',['set_container_web_index_page',['../classpyrax_1_1object__storage_1_1StorageClient.html#a77469aa965e7df1c81ad902bea324a36',1,'pyrax::object_storage::StorageClient']]],
['set_5fcontent_5fcaching',['set_content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#adf1ddf288772e7bd2a65e100881d1b5f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_content_caching()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#adf1ddf288772e7bd2a65e100881d1b5f',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_content_caching()']]],
['set_5fcredential_5ffile',['set_credential_file',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a31357d099c87594b661d674bb12a56c0',1,'pyrax::base_identity::BaseIdentity.set_credential_file()'],['../namespacepyrax.html#a7375be0702b4c4322b674eaf94795c19',1,'pyrax.set_credential_file()']]],
['set_5fcredentials',['set_credentials',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::base_identity::BaseIdentity.set_credentials()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::identity::rax_identity::RaxIdentity.set_credentials()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
@@ -18,18 +19,18 @@ var searchData=
['set_5fenvironment',['set_environment',['../namespacepyrax.html#a083408c25f486a8aa2fab4a17a587f26',1,'pyrax']]],
['set_5ferror_5fpage',['set_error_page',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_error_page()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a9e8cf14c622fff01da294f2c2352fd92',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_error_page()']]],
['set_5fhttp_5fdebug',['set_http_debug',['../namespacepyrax.html#a9d6ec1abac4bb1602676632e096ac945',1,'pyrax']]],
- ['set_5fmetadata',['set_metadata',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cf_wrapper::container::Container.set_metadata()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cf_wrapper::storage_object::StorageObject.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::Node.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueClient.set_metadata()']]],
+ ['set_5fmetadata',['set_metadata',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::Node.set_metadata()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata()'],['../classpyrax_1_1object__storage_1_1Container.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::Container.set_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::ContainerManager.set_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObject.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::StorageObject.set_metadata()'],['../classpyrax_1_1object__storage_1_1StorageObjectManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::object_storage::StorageObjectManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueManager.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueManager.set_metadata()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a72a400370828e749dd0d63a622a95ee2',1,'pyrax::queueing::QueueClient.set_metadata()']]],
['set_5fmetadata_5ffor_5fnode',['set_metadata_for_node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a40aea8e89a0b3f7a146312305263dd8e',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.set_metadata_for_node()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a40aea8e89a0b3f7a146312305263dd8e',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_metadata_for_node()']]],
- ['set_5fobject_5fmetadata',['set_object_metadata',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5fobject_5fmetadata',['set_object_metadata',['../classpyrax_1_1object__storage_1_1Container.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::Container.set_object_metadata()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::ContainerManager.set_object_metadata()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a684f0273a86b04ee46bf5a7304df768d',1,'pyrax::object_storage::StorageClient.set_object_metadata()']]],
['set_5fpassword',['set_password',['../classpyrax_1_1fakes_1_1FakeKeyring.html#aec2232bed19634040d43b212ef49473c',1,'pyrax::fakes::FakeKeyring']]],
['set_5fsession_5fpersistence',['set_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a407ba440587e1dc45a9c75ced3f6ea8c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.set_session_persistence()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a407ba440587e1dc45a9c75ced3f6ea8c',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.set_session_persistence()']]],
['set_5fsetting',['set_setting',['../namespacepyrax.html#a8a337253c5949ea5d35aefa452c7540c',1,'pyrax']]],
- ['set_5ftemp_5furl_5fkey',['set_temp_url_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a3815e3caab49229722d4761c169fc358',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['set_5ftemp_5furl_5fkey',['set_temp_url_key',['../classpyrax_1_1object__storage_1_1StorageClient.html#a3815e3caab49229722d4761c169fc358',1,'pyrax::object_storage::StorageClient']]],
['set_5ftimeout',['set_timeout',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a095ce5c15e8d86c06b68342d3ef66c66',1,'pyrax::clouddns::CloudDNSClient']]],
- ['set_5fweb_5ferror_5fpage',['set_web_error_page',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::cf_wrapper::container::Container']]],
- ['set_5fweb_5findex_5fpage',['set_web_index_page',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::cf_wrapper::container::Container']]],
+ ['set_5fweb_5ferror_5fpage',['set_web_error_page',['../classpyrax_1_1object__storage_1_1Container.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::object_storage::Container.set_web_error_page()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#a5fa5ed0e434f44f721a751194551badc',1,'pyrax::object_storage::ContainerManager.set_web_error_page()']]],
+ ['set_5fweb_5findex_5fpage',['set_web_index_page',['../classpyrax_1_1object__storage_1_1Container.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::object_storage::Container.set_web_index_page()'],['../classpyrax_1_1object__storage_1_1ContainerManager.html#ade8eed6cfb701ccd5d3a42b34dba771c',1,'pyrax::object_storage::ContainerManager.set_web_index_page()']]],
['slugify',['slugify',['../namespacepyrax_1_1utils.html#ab2ad05b0a140d74e375cf05ba9928cc3',1,'pyrax::utils']]],
['status',['status',['../classpyrax_1_1fakes_1_1FakeResponse.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeResponse.status'],['../classpyrax_1_1fakes_1_1FakeResponse.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeResponse.status'],['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#a88fc462b0275fb81899449a188dbe852',1,'pyrax::fakes::FakeStatusChanger.status()']]],
- ['store_5fobject',['store_object',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::cf_wrapper::client::CFClient.store_object()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::cf_wrapper::container::Container.store_object()']]],
- ['sync_5ffolder_5fto_5fcontainer',['sync_folder_to_container',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#af2b0d6de7b4f7cb42d5ecef34b239907',1,'pyrax::cf_wrapper::client::CFClient']]]
+ ['store_5fobject',['store_object',['../classpyrax_1_1object__storage_1_1Container.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::object_storage::Container.store_object()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#af0a50c69bbe50a35557fb373cf3b4b6f',1,'pyrax::object_storage::StorageClient.store_object()']]],
+ ['sync_5ffolder_5fto_5fcontainer',['sync_folder_to_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#af2b0d6de7b4f7cb42d5ecef34b239907',1,'pyrax::object_storage::StorageClient']]]
];
diff --git a/docs/html/search/functions_74.js b/docs/html/search/functions_74.js
index d9012cf1..bea355dd 100644
--- a/docs/html/search/functions_74.js
+++ b/docs/html/search/functions_74.js
@@ -2,5 +2,6 @@ var searchData=
[
['test_5fnotification',['test_notification',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#a2c72af29147d7aaedc2abb2176cae425',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.test_notification()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a2c72af29147d7aaedc2abb2176cae425',1,'pyrax::cloudmonitoring::CloudMonitorClient.test_notification()']]],
['to_5fdict',['to_dict',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#aa5152a042338ea29555f11041ee6e330',1,'pyrax::cloudloadbalancers::Node.to_dict()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#aa5152a042338ea29555f11041ee6e330',1,'pyrax::cloudloadbalancers::VirtualIP.to_dict()']]],
- ['to_5ftimestamp',['to_timestamp',['../namespacepyrax_1_1utils.html#af4be48d96f3ad2c6cd297a76ccdb1a40',1,'pyrax::utils']]]
+ ['to_5ftimestamp',['to_timestamp',['../namespacepyrax_1_1utils.html#af4be48d96f3ad2c6cd297a76ccdb1a40',1,'pyrax::utils']]],
+ ['total_5fbytes',['total_bytes',['../classpyrax_1_1object__storage_1_1StorageObject.html#aae0d17bd3ac8c835e23cae7e9e3581d8',1,'pyrax::object_storage::StorageObject']]]
];
diff --git a/docs/html/search/functions_75.js b/docs/html/search/functions_75.js
index 43d63577..e40af20b 100644
--- a/docs/html/search/functions_75.js
+++ b/docs/html/search/functions_75.js
@@ -25,9 +25,8 @@ var searchData=
['update_5fuser',['update_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::base_identity::BaseIdentity.update_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::clouddatabases::CloudDatabaseInstance.update_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::clouddatabases::CloudDatabaseClient.update_user()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::identity::rax_identity::RaxIdentity.update_user()']]],
['update_5fwebhook',['update_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::ScalingGroup.update_webhook()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::ScalingGroupManager.update_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::AutoScalePolicy.update_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a210ee9051a2ad35b497f979f2a3123cb',1,'pyrax::autoscale::AutoScaleClient.update_webhook()']]],
['update_5fwebhook_5fmetadata',['update_webhook_metadata',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::ScalingGroup.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::ScalingGroupManager.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::AutoScalePolicy.update_webhook_metadata()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a145c2a7a53b56e7450b1b4659cd6c616',1,'pyrax::autoscale::AutoScaleClient.update_webhook_metadata()']]],
- ['upload_5ffile',['upload_file',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::cf_wrapper::client::CFClient.upload_file()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::cf_wrapper::container::Container.upload_file()']]],
- ['upload_5ffiles_5fin_5ffolder',['upload_files_in_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#af1d1df487458050d64d162846617d266',1,'pyrax::cf_wrapper::client::FolderUploader']]],
- ['upload_5ffolder',['upload_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a1d81cba43ddabd40e412c5d709192958',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['uri',['uri',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#af205052c80b55070237ee9052f067ba3',1,'pyrax::cf_wrapper::client::Connection']]],
+ ['upload_5ffile',['upload_file',['../classpyrax_1_1object__storage_1_1Container.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::object_storage::Container.upload_file()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a3857f84faa9608b0bf0a4e84ba5b1566',1,'pyrax::object_storage::StorageClient.upload_file()']]],
+ ['upload_5ffiles_5fin_5ffolder',['upload_files_in_folder',['../classpyrax_1_1object__storage_1_1FolderUploader.html#af1d1df487458050d64d162846617d266',1,'pyrax::object_storage::FolderUploader']]],
+ ['upload_5ffolder',['upload_folder',['../classpyrax_1_1object__storage_1_1StorageClient.html#a1d81cba43ddabd40e412c5d709192958',1,'pyrax::object_storage::StorageClient']]],
['url_5ffor',['url_for',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::service_catalog::ServiceCatalog']]]
];
diff --git a/docs/html/search/namespaces_70.js b/docs/html/search/namespaces_70.js
index 4ab3d40d..1d0d697f 100644
--- a/docs/html/search/namespaces_70.js
+++ b/docs/html/search/namespaces_70.js
@@ -2,16 +2,13 @@ var searchData=
[
['autoscale',['autoscale',['../namespacepyrax_1_1autoscale.html',1,'pyrax']]],
['base_5fidentity',['base_identity',['../namespacepyrax_1_1base__identity.html',1,'pyrax']]],
- ['cf_5fwrapper',['cf_wrapper',['../namespacepyrax_1_1cf__wrapper.html',1,'pyrax']]],
['client',['client',['../namespacepyrax_1_1client.html',1,'pyrax']]],
- ['client',['client',['../namespacepyrax_1_1cf__wrapper_1_1client.html',1,'pyrax::cf_wrapper']]],
['cloudblockstorage',['cloudblockstorage',['../namespacepyrax_1_1cloudblockstorage.html',1,'pyrax']]],
['clouddatabases',['clouddatabases',['../namespacepyrax_1_1clouddatabases.html',1,'pyrax']]],
['clouddns',['clouddns',['../namespacepyrax_1_1clouddns.html',1,'pyrax']]],
['cloudloadbalancers',['cloudloadbalancers',['../namespacepyrax_1_1cloudloadbalancers.html',1,'pyrax']]],
['cloudmonitoring',['cloudmonitoring',['../namespacepyrax_1_1cloudmonitoring.html',1,'pyrax']]],
['cloudnetworks',['cloudnetworks',['../namespacepyrax_1_1cloudnetworks.html',1,'pyrax']]],
- ['container',['container',['../namespacepyrax_1_1cf__wrapper_1_1container.html',1,'pyrax::cf_wrapper']]],
['exceptions',['exceptions',['../namespacepyrax_1_1exceptions.html',1,'pyrax']]],
['fakes',['fakes',['../namespacepyrax_1_1fakes.html',1,'pyrax']]],
['http',['http',['../namespacepyrax_1_1http.html',1,'pyrax']]],
@@ -19,12 +16,12 @@ var searchData=
['image',['image',['../namespacepyrax_1_1image.html',1,'pyrax']]],
['keystone_5fidentity',['keystone_identity',['../namespacepyrax_1_1identity_1_1keystone__identity.html',1,'pyrax::identity']]],
['manager',['manager',['../namespacepyrax_1_1manager.html',1,'pyrax']]],
+ ['object_5fstorage',['object_storage',['../namespacepyrax_1_1object__storage.html',1,'pyrax']]],
['pyrax',['pyrax',['../namespacepyrax.html',1,'']]],
['queueing',['queueing',['../namespacepyrax_1_1queueing.html',1,'pyrax']]],
['rax_5fidentity',['rax_identity',['../namespacepyrax_1_1identity_1_1rax__identity.html',1,'pyrax::identity']]],
['resource',['resource',['../namespacepyrax_1_1resource.html',1,'pyrax']]],
['service_5fcatalog',['service_catalog',['../namespacepyrax_1_1service__catalog.html',1,'pyrax']]],
- ['storage_5fobject',['storage_object',['../namespacepyrax_1_1cf__wrapper_1_1storage__object.html',1,'pyrax::cf_wrapper']]],
['utils',['utils',['../namespacepyrax_1_1utils.html',1,'pyrax']]],
['version',['version',['../namespacepyrax_1_1version.html',1,'pyrax']]]
];
diff --git a/docs/html/search/properties_63.js b/docs/html/search/properties_63.js
index 430fdaff..f092b12a 100644
--- a/docs/html/search/properties_63.js
+++ b/docs/html/search/properties_63.js
@@ -1,11 +1,12 @@
var searchData=
[
- ['cdn_5fios_5furi',['cdn_ios_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a905e4199215ee5839e09aba563d40a39',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5flog_5fretention',['cdn_log_retention',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a7ab42343f8fb8b6a8c8464effc0f6765',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fssl_5furi',['cdn_ssl_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a315a39c261f744f27e1dc2bb09d281c1',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fstreaming_5furi',['cdn_streaming_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a000f4ad534d85c42b466056d02636ca9',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5fttl',['cdn_ttl',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2e0f897ad6464bc7dafd9935fa502754',1,'pyrax::cf_wrapper::container::Container']]],
- ['cdn_5furi',['cdn_uri',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a2fed2fa3680b223c766240fab5f90bcd',1,'pyrax::cf_wrapper::container::Container']]],
+ ['cdn_5fenabled',['cdn_enabled',['../classpyrax_1_1object__storage_1_1Container.html#a15b27a248ed9133d6a84543a420fe2f9',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fios_5furi',['cdn_ios_uri',['../classpyrax_1_1object__storage_1_1Container.html#a905e4199215ee5839e09aba563d40a39',1,'pyrax::object_storage::Container']]],
+ ['cdn_5flog_5fretention',['cdn_log_retention',['../classpyrax_1_1object__storage_1_1Container.html#a7ab42343f8fb8b6a8c8464effc0f6765',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fssl_5furi',['cdn_ssl_uri',['../classpyrax_1_1object__storage_1_1Container.html#a315a39c261f744f27e1dc2bb09d281c1',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fstreaming_5furi',['cdn_streaming_uri',['../classpyrax_1_1object__storage_1_1Container.html#a000f4ad534d85c42b466056d02636ca9',1,'pyrax::object_storage::Container']]],
+ ['cdn_5fttl',['cdn_ttl',['../classpyrax_1_1object__storage_1_1Container.html#a2e0f897ad6464bc7dafd9935fa502754',1,'pyrax::object_storage::Container']]],
+ ['cdn_5furi',['cdn_uri',['../classpyrax_1_1object__storage_1_1Container.html#a2fed2fa3680b223c766240fab5f90bcd',1,'pyrax::object_storage::Container']]],
['connection_5flogging',['connection_logging',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a863329ee2898f7d6212281bab325e419',1,'pyrax::cloudloadbalancers::CloudLoadBalancer']]],
['content_5fcaching',['content_caching',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a1cd94acd6d68908839cb20d0ad216ba5',1,'pyrax::cloudloadbalancers::CloudLoadBalancer']]]
];
diff --git a/docs/html/search/search.js b/docs/html/search/search.js
index 0fb217ae..4316458a 100644
--- a/docs/html/search/search.js
+++ b/docs/html/search/search.js
@@ -9,11 +9,11 @@ var indexSectionsWithContent =
{
0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111011110111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111011011010100011101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111011011010101011101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111111111111111111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111111011111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111010001010000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111000001010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
};
var indexSectionNames =
diff --git a/docs/html/search/variables_61.js b/docs/html/search/variables_61.js
index b6f4fb4c..b0177626 100644
--- a/docs/html/search/variables_61.js
+++ b/docs/html/search/variables_61.js
@@ -1,5 +1,6 @@
var searchData=
[
+ ['account_5fmeta_5fprefix',['ACCOUNT_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a0f80cbb0f6e98564cfb5f45109786099',1,'pyrax::object_storage']]],
['actual_5frun',['actual_run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a7fff87854e7e88a70303035e54c031ce',1,'pyrax::fakes::FakeFolderUploader::actual_run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a7fff87854e7e88a70303035e54c031ce',1,'pyrax::fakes::FakeBulkDeleter::actual_run()']]],
['add_5frecord',['add_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#ad1ce0203df93b6f58971458de77f264e',1,'pyrax::clouddns::CloudDNSDomain.add_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ad1ce0203df93b6f58971458de77f264e',1,'pyrax::clouddns::CloudDNSClient.add_record()']]],
['address',['address',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#ade5a18d52133ef21f211020ceb464c07',1,'pyrax::cloudloadbalancers::Node::address()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#ade5a18d52133ef21f211020ceb464c07',1,'pyrax::cloudloadbalancers::VirtualIP.address()']]],
@@ -10,7 +11,6 @@ var searchData=
['att',['att',['../classpyrax_1_1utils_1_1__WaitThread.html#ac356deedcb6c8bb875aaedf10db0a455',1,'pyrax::utils::_WaitThread']]],
['attempts',['attempts',['../classpyrax_1_1utils_1_1__WaitThread.html#abb0145d5080497f5f4212ca51fbc6316',1,'pyrax::utils::_WaitThread']]],
['attr_5fmap',['attr_map',['../classpyrax_1_1base__identity_1_1Endpoint.html#abe24abfdb59c83fe062d8473359014d6',1,'pyrax::base_identity::Endpoint']]],
- ['auth_5fattempts',['AUTH_ATTEMPTS',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a8086cfcceb4dcb4059f9b974ccf12fea',1,'pyrax::cf_wrapper::client']]],
['auth_5fendpoint',['AUTH_ENDPOINT',['../namespacepyrax_1_1identity_1_1rax__identity.html#a62e4aae3f13b88a642e7cd2a19d43f36',1,'pyrax::identity::rax_identity']]],
['authenticated',['authenticated',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a48f0dc4cf47cd14cdfda7e8495b0a76b',1,'pyrax::base_identity::BaseIdentity.authenticated()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a48f0dc4cf47cd14cdfda7e8495b0a76b',1,'pyrax::fakes::FakeIdentity.authenticated()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a48f0dc4cf47cd14cdfda7e8495b0a76b',1,'pyrax::identity::rax_identity::RaxIdentity::authenticated()']]],
['author',['author',['../namespacesetup.html#ab873cebb3b7e47db4fe59837d1aaa210',1,'setup']]],
diff --git a/docs/html/search/variables_62.js b/docs/html/search/variables_62.js
index 0c3f97f3..627d3122 100644
--- a/docs/html/search/variables_62.js
+++ b/docs/html/search/variables_62.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['base_5fpath',['base_path',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a80ae992797a306309f835d904c520c28',1,'pyrax::cf_wrapper::client::FolderUploader']]],
['body',['body',['../classpyrax_1_1fakes_1_1FakeResponse.html#a3f9f361dae8242c0df9e8ff512e21732',1,'pyrax::fakes::FakeResponse.body()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a14d48c2e9f05d0b03044eb45f308fcb0',1,'pyrax::queueing::QueueMessage.body()']]],
- ['bulk_5fdelete_5finterval',['bulk_delete_interval',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#accd7312117a68637f8a9ad3f2b6968e6',1,'pyrax::cf_wrapper::client::CFClient']]]
+ ['bulk_5fdelete_5finterval',['bulk_delete_interval',['../classpyrax_1_1object__storage_1_1StorageClient.html#accd7312117a68637f8a9ad3f2b6968e6',1,'pyrax::object_storage::StorageClient']]],
+ ['bytes',['bytes',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab5b288623cd78ddf5eeabe825d17a1c1',1,'pyrax::fakes::FakeStorageObject']]]
];
diff --git a/docs/html/search/variables_63.js b/docs/html/search/variables_63.js
index f0b37311..93e41a32 100644
--- a/docs/html/search/variables_63.js
+++ b/docs/html/search/variables_63.js
@@ -3,14 +3,12 @@ var searchData=
['callback',['callback',['../classpyrax_1_1utils_1_1__WaitThread.html#adf568d8baca0701772280d0011e68a72',1,'pyrax::utils::_WaitThread']]],
['callstack',['callstack',['../namespacepyrax.html#ae78f359d64f9eeed6dc0df4a1102dca8',1,'pyrax']]],
['catalog',['catalog',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a6be3d84fa45e3612e5d22f1015b288af',1,'pyrax::service_catalog::ServiceCatalog']]],
- ['cdn_5fconnection',['cdn_connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9ebd30d3926b0fe246ca66e564caf148',1,'pyrax::cf_wrapper::client::CFClient.cdn_connection()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#a9ebd30d3926b0fe246ca66e564caf148',1,'pyrax::cf_wrapper::client::Connection.cdn_connection()']]],
- ['cdn_5fenabled',['cdn_enabled',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a15b27a248ed9133d6a84543a420fe2f9',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['cdn_5furl',['cdn_url',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#af8614020022a9bd864339bd42b8fceb4',1,'pyrax::cf_wrapper::client::Connection']]],
+ ['cdn_5fmanagement_5furl',['cdn_management_url',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae2aa2d50cffe9e82ed43b142d7ba1805',1,'pyrax::object_storage::StorageClient']]],
['check_5fcount',['check_count',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#ad7691a5628dc61210d03d85bb1752829',1,'pyrax::fakes::FakeStatusChanger']]],
['cidr',['cidr',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a22262d03c6a363b1f41f4dffd3b1c797',1,'pyrax::cloudnetworks::CloudNetwork']]],
['claim_5fid',['claim_id',['../classpyrax_1_1queueing_1_1QueueMessage.html#a4fba796dda2883012b75419f84e148ee',1,'pyrax::queueing::QueueMessage']]],
['classifiers',['classifiers',['../namespacesetup.html#a501bfc1867c9d0b5d91873982919a191',1,'setup']]],
- ['client',['client',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::client::FolderUploader.client()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::client::BulkDeleter::client()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::container::Container::client()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::cf_wrapper::storage_object::StorageObject::client()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeStorageObject::client()'],['../classpyrax_1_1fakes_1_1FakeService.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeService::client()']]],
+ ['client',['client',['../classpyrax_1_1fakes_1_1FakeService.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::fakes::FakeService::client()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::object_storage::FolderUploader.client()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#ad5bc32b75da65fe60067f501a4bb6665',1,'pyrax::object_storage::BulkDeleter::client()']]],
['client_5fid',['client_id',['../classpyrax_1_1queueing_1_1QueueClient.html#a3880622ca383fee22fbbac18442bae32',1,'pyrax::queueing::QueueClient']]],
['clients',['clients',['../classpyrax_1_1base__identity_1_1Service.html#a4058051e3069ff2943649d921f089458',1,'pyrax::base_identity::Service.clients()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#a4058051e3069ff2943649d921f089458',1,'pyrax::fakes::FakeIdentityService.clients()']]],
['cloud_5fblockstorage',['cloud_blockstorage',['../namespacepyrax.html#a7f4dc3b1da79f21103723f78b910c8a5',1,'pyrax']]],
@@ -23,13 +21,14 @@ var searchData=
['cloudservers',['cloudservers',['../namespacepyrax.html#a558330633ea0238aee2d4f5f5a7afa07',1,'pyrax']]],
['code',['code',['../classpyrax_1_1exceptions_1_1ClientException.html#afb9ed1b8a27eb20854efe6e23e297683',1,'pyrax::exceptions::ClientException']]],
['comment',['comment',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a8c0288707ed90c2275d70e22bd1f16d9',1,'pyrax::clouddns::CloudDNSRecord.comment()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a8c0288707ed90c2275d70e22bd1f16d9',1,'pyrax::clouddns::CloudDNSPTRRecord.comment()']]],
- ['completed',['completed',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::cf_wrapper::client::BulkDeleter::completed()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::fakes::FakeBulkDeleter.completed()']]],
+ ['completed',['completed',['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::fakes::FakeBulkDeleter.completed()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a5fd2693b43ceb7c5b415600614d1f0d2',1,'pyrax::object_storage::BulkDeleter::completed()']]],
['condition',['condition',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a4824b91cc0e6b5f112bdd8049af4d7d6',1,'pyrax::cloudloadbalancers::Node']]],
['config_5ffile',['config_file',['../namespacepyrax.html#ae6512f1802b7f1f9cc6f196a0938db60',1,'pyrax']]],
- ['connection',['connection',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a10275a078bd1abcbebc206cc5d19e18b',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['connection_5fretries',['CONNECTION_RETRIES',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a19074fb0e7d33e5cb6f2fc49877e64c1',1,'pyrax::cf_wrapper::client']]],
- ['connection_5ftimeout',['CONNECTION_TIMEOUT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a32d68802775b5e101a259fb6f3edf5d7',1,'pyrax::cf_wrapper::client']]],
- ['container',['container',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::client::FolderUploader.container()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::client::BulkDeleter.container()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::cf_wrapper::storage_object::StorageObject.container()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::fakes::FakeStorageObject.container()']]],
+ ['container',['container',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::object_storage::FolderUploader.container()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a030ecaa2a61b422a8ca7422403ad8c77',1,'pyrax::object_storage::BulkDeleter.container()']]],
+ ['container_5fhead_5fprefix',['CONTAINER_HEAD_PREFIX',['../namespacepyrax_1_1object__storage.html#a734bcae6f49af0e0c9e435ba133a8e20',1,'pyrax::object_storage']]],
+ ['container_5fmeta_5fprefix',['CONTAINER_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a7fe46f5679b3f4725212a4cc3a2c651f',1,'pyrax::object_storage']]],
['content',['content',['../classpyrax_1_1fakes_1_1FakeResponse.html#aaa48247c6e717970fa828bc18b7a1a16',1,'pyrax::fakes::FakeResponse']]],
- ['content_5ftype',['content_type',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::cf_wrapper::storage_object::StorageObject.content_type()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::fakes::FakeStorageObject.content_type()']]]
+ ['content_5ftype',['content_type',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a221623422ea72de630e7e446a84e9f1f',1,'pyrax::fakes::FakeStorageObject']]],
+ ['count',['count',['../classpyrax_1_1object__storage_1_1StorageClient.html#ae11b3deb3de3df7dc48e439074023e35',1,'pyrax::object_storage::StorageClient']]],
+ ['create_5fcontainer',['create_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#acf462fa5cb359e9a9d8113b721bd0769',1,'pyrax::object_storage::StorageClient']]]
];
diff --git a/docs/html/search/variables_64.js b/docs/html/search/variables_64.js
index 699bbfa2..f07d725c 100644
--- a/docs/html/search/variables_64.js
+++ b/docs/html/search/variables_64.js
@@ -1,16 +1,17 @@
var searchData=
[
['data',['data',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a511ae0b1c13f95e5f08f1a0dd3da3d93',1,'pyrax::clouddns::CloudDNSRecord.data()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a511ae0b1c13f95e5f08f1a0dd3da3d93',1,'pyrax::clouddns::CloudDNSPTRRecord.data()']]],
- ['date_5fformat',['DATE_FORMAT',['../namespacepyrax_1_1base__identity.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::base_identity.DATE_FORMAT()'],['../namespacepyrax_1_1cf__wrapper_1_1client.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::cf_wrapper::client.DATE_FORMAT()']]],
+ ['date_5fformat',['DATE_FORMAT',['../namespacepyrax_1_1base__identity.html#a71e8d76a94f92b1959b2ea603c78df9e',1,'pyrax::base_identity']]],
['debug',['debug',['../namespacepyrax.html#a4c919e19877c5868fcd9f7662c236649',1,'pyrax']]],
- ['default_5fcdn_5fttl',['default_cdn_ttl',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a15a3ad1a3abde8c5a3fede95c2b24c19',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['default_5fchunksize',['DEFAULT_CHUNKSIZE',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aba697425d5dbdf43c88a23031c4ba8b1',1,'pyrax::cf_wrapper::client']]],
+ ['default_5fcdn_5fttl',['DEFAULT_CDN_TTL',['../namespacepyrax_1_1object__storage.html#ad62289ecbb5a2744ec31be09bfa378ec',1,'pyrax::object_storage']]],
+ ['default_5fchunksize',['DEFAULT_CHUNKSIZE',['../namespacepyrax_1_1object__storage.html#aba697425d5dbdf43c88a23031c4ba8b1',1,'pyrax::object_storage']]],
['default_5fdelay',['DEFAULT_DELAY',['../namespacepyrax_1_1clouddns.html#a0695d4ce7bb0b1de03ba3068cde8d89a',1,'pyrax::clouddns']]],
['default_5fencoding',['default_encoding',['../namespacepyrax.html#ab8005f4babffb239fd05dbb8c38551b7',1,'pyrax']]],
['default_5fformat',['DEFAULT_FORMAT',['../namespacepyrax_1_1image.html#a44b30658bb5248f1707ea99431b29626',1,'pyrax::image']]],
['default_5fregion',['default_region',['../namespacepyrax.html#affa3c4afe67ff7c721e823ac8b67fa16',1,'pyrax.default_region()'],['../namespacepyrax_1_1base__identity.html#affa3c4afe67ff7c721e823ac8b67fa16',1,'pyrax::base_identity.default_region()']]],
['default_5fretry',['DEFAULT_RETRY',['../namespacepyrax_1_1clouddns.html#aaa69438071807c71e3d2f798f0382e78',1,'pyrax::clouddns']]],
['default_5ftimeout',['DEFAULT_TIMEOUT',['../namespacepyrax_1_1clouddns.html#aa66130c897c01393a63de104588aceb7',1,'pyrax::clouddns']]],
+ ['delete_5fcontainer',['delete_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#a38db6ddfc569a4750ff9cf368df4b3eb',1,'pyrax::object_storage::StorageClient']]],
['description',['description',['../namespacesetup.html#a23af17c78302b71c14ef38ea40b8d1d7',1,'setup']]],
['desired',['desired',['../classpyrax_1_1utils_1_1__WaitThread.html#a6788c2131efce60abb1699742c1c9509',1,'pyrax::utils::_WaitThread']]],
['details',['details',['../classpyrax_1_1exceptions_1_1ClientException.html#ace24e4da2dacc04a319964f1507ddb87',1,'pyrax::exceptions::ClientException']]],
diff --git a/docs/html/search/variables_65.js b/docs/html/search/variables_65.js
index a5470b30..4ee188e4 100644
--- a/docs/html/search/variables_65.js
+++ b/docs/html/search/variables_65.js
@@ -1,14 +1,11 @@
var searchData=
[
- ['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::cf_wrapper::client']]],
+ ['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1object__storage.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::object_storage']]],
['endpoint_5ftype',['endpoint_type',['../classpyrax_1_1client_1_1BaseClient.html#a3bd93a44d4f767d114caabe620f7e772',1,'pyrax::client::BaseClient']]],
['endpoints',['endpoints',['../classpyrax_1_1base__identity_1_1Service.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::base_identity::Service.endpoints()'],['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::exceptions::AmbiguousEndpoints::endpoints()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::fakes::FakeIdentityService.endpoints()']]],
['entity',['entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#a6e49c9e0d2b310e885a8c8f6ebc155e6',1,'pyrax::cloudmonitoring::CloudMonitorCheck::entity()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#a6e49c9e0d2b310e885a8c8f6ebc155e6',1,'pyrax::cloudmonitoring::CloudMonitorAlarm::entity()']]],
['env_5fdct',['env_dct',['../classpyrax_1_1Settings.html#af10cee202a039548ef1872a4ebfcbaa4',1,'pyrax::Settings']]],
- ['etag',['etag',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a1ee78e6280ae4527b4257099cfb8c330',1,'pyrax::cf_wrapper::storage_object::StorageObject.etag()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a1ee78e6280ae4527b4257099cfb8c330',1,'pyrax::fakes::FakeStorageObject.etag()']]],
- ['etag_5ffail_5fpat',['etag_fail_pat',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a73ecac0c29c1866713f3d26ca05f986c',1,'pyrax::cf_wrapper::client']]],
- ['etag_5ffailed_5fpattern',['etag_failed_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a2902c02c2870c84af5ee318ad3bd548f',1,'pyrax::cf_wrapper::client']]],
['example_5furi',['example_uri',['../namespacepyrax_1_1fakes.html#ab35e755b4978ff39e6935549372faa0a',1,'pyrax::fakes']]],
['expires',['expires',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a49192f7cc960a0aab538e014cf449225',1,'pyrax::base_identity::BaseIdentity']]],
- ['extra_5fargs',['extra_args',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::ResultsIterator.extra_args()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::SubdomainResultsIterator.extra_args()']]]
+ ['extra_5fargs',['extra_args',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::ResultsIterator.extra_args()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::clouddns::SubdomainResultsIterator.extra_args()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a9fc9a19c3a197ea5fff10e2861ba5480',1,'pyrax::utils::ResultsIterator.extra_args()']]]
];
diff --git a/docs/html/search/variables_66.js b/docs/html/search/variables_66.js
index 1f5c44af..1ef0aa15 100644
--- a/docs/html/search/variables_66.js
+++ b/docs/html/search/variables_66.js
@@ -8,11 +8,11 @@ var searchData=
['fake_5fidentity_5ftenants_5fresponse',['fake_identity_tenants_response',['../namespacepyrax_1_1fakes.html#a65e2c3f8ca1f24f3ca6291eb1b4ce82d',1,'pyrax::fakes']]],
['fake_5fidentity_5ftokens_5fresponse',['fake_identity_tokens_response',['../namespacepyrax_1_1fakes.html#a2443f043a376e04301951051cc6c346e',1,'pyrax::fakes']]],
['fake_5fidentity_5fuser_5fresponse',['fake_identity_user_response',['../namespacepyrax_1_1fakes.html#a1b509b0efe0f8bc4942d7d2d1af88d61',1,'pyrax::fakes']]],
- ['fault',['FAULT',['../namespacepyrax_1_1cf__wrapper_1_1container.html#a892f51831156b6ea326c363e4b10631a',1,'pyrax::cf_wrapper::container']]],
- ['fetch',['fetch',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a271dcd2cab08dc966228cd3d12e7cfb7',1,'pyrax::cf_wrapper::storage_object::StorageObject']]],
+ ['fault',['FAULT',['../namespacepyrax_1_1object__storage.html#a892f51831156b6ea326c363e4b10631a',1,'pyrax::object_storage']]],
+ ['fetch',['fetch',['../classpyrax_1_1object__storage_1_1StorageObject.html#a271dcd2cab08dc966228cd3d12e7cfb7',1,'pyrax::object_storage::StorageObject']]],
['find_5fnetwork_5fby_5fname',['find_network_by_name',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#aa2a5394d949e4dbc374a082fe3c16d84',1,'pyrax::cloudnetworks::CloudNetworkClient']]],
['flavors',['flavors',['../classpyrax_1_1fakes_1_1FakeCSClient.html#ae18dec9cd12ee32dd9ea0f5c8aabfcae',1,'pyrax::fakes::FakeCSClient']]],
['fnames',['fnames',['../namespacepyrax_1_1identity.html#a6cac12681a298a3f33aefe5d9a6044ea',1,'pyrax::identity']]],
- ['folder_5fupload_5fstatus',['folder_upload_status',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa27847dbcb2f79be04aaabd5b85291e6',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['folder_5fupload_5fstatus',['folder_upload_status',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa27847dbcb2f79be04aaabd5b85291e6',1,'pyrax::object_storage::StorageClient']]],
['fpath',['fpath',['../namespacepyrax_1_1identity.html#a709dee3638ba4186d2985e17f10f8b0a',1,'pyrax::identity']]]
];
diff --git a/docs/html/search/variables_67.js b/docs/html/search/variables_67.js
index 1abf48ab..b0f56410 100644
--- a/docs/html/search/variables_67.js
+++ b/docs/html/search/variables_67.js
@@ -1,8 +1,13 @@
var searchData=
[
- ['gen',['gen',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a295392d2c1465863e97d36dfd19a4b97',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get',['get',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a9c57eef25270a48365249a68581a1247',1,'pyrax::cf_wrapper::client::CFClient.get()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a9c57eef25270a48365249a68581a1247',1,'pyrax::cf_wrapper::container::Container.get()']]],
- ['get_5fall_5fcontainers',['get_all_containers',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa476a035f5fbe5e4aeb41337529d0740',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['get_5fdetails',['GET_DETAILS',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a19c3271e3266881464ec6c4cd9366810',1,'pyrax::clouddns::CloudDNSRecord::GET_DETAILS()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseDatabase::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseUser::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseFlavor.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseFlavor::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackup.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseBackup::get_details()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::resource::BaseResource.get_details()']]],
+ ['gen',['gen',['../classpyrax_1_1object__storage_1_1StorageClient.html#a295392d2c1465863e97d36dfd19a4b97',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fall_5fcontainers',['get_all_containers',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa476a035f5fbe5e4aeb41337529d0740',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer',['get_container',['../classpyrax_1_1object__storage_1_1StorageClient.html#a2f69128249aa724dc31c0e7fefd8e220',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fobject_5fnames',['get_container_object_names',['../classpyrax_1_1object__storage_1_1StorageClient.html#a26f3b7cd70d00ef79f4d9c9456e7ac47',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fcontainer_5fobjects',['get_container_objects',['../classpyrax_1_1object__storage_1_1StorageClient.html#a23fde2bdc4232270dfc2928cc3e41203',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fdetails',['get_details',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseDatabase.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseDatabase::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseUser::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseFlavor.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseFlavor::get_details()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseBackup.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::clouddatabases::CloudDatabaseBackup::get_details()'],['../classpyrax_1_1resource_1_1BaseResource.html#ab6f7bc0828ee3d547e244dd336572d76',1,'pyrax::resource::BaseResource.get_details()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a19c3271e3266881464ec6c4cd9366810',1,'pyrax::clouddns::CloudDNSRecord::GET_DETAILS()']]],
+ ['get_5finfo',['get_info',['../classpyrax_1_1object__storage_1_1StorageClient.html#a38dec823de00a197d6b68448409433bc',1,'pyrax::object_storage::StorageClient']]],
+ ['get_5fobject_5fnames',['get_object_names',['../classpyrax_1_1object__storage_1_1Container.html#af31bc087b14353da54461044cea601de',1,'pyrax::object_storage::Container']]],
+ ['get_5fobjects',['get_objects',['../classpyrax_1_1object__storage_1_1Container.html#a0f75050d56e08824919f67b013ba7ab6',1,'pyrax::object_storage::Container']]],
['groupconfiguration',['groupConfiguration',['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#a93503e07c794431781a5915b1a56cd6f',1,'pyrax::fakes::FakeScalingGroup']]]
];
diff --git a/docs/html/search/variables_68.js b/docs/html/search/variables_68.js
index 830fbb5f..436a90b3 100644
--- a/docs/html/search/variables_68.js
+++ b/docs/html/search/variables_68.js
@@ -1,10 +1,10 @@
var searchData=
[
- ['head_5fdate_5fformat',['HEAD_DATE_FORMAT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#aea95a0010e586f71e6587a111cae730c',1,'pyrax::cf_wrapper::client']]],
+ ['hash',['hash',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a28b5828ac3b16e22c26077eedf5674ff',1,'pyrax::fakes::FakeStorageObject']]],
['headers',['headers',['../classpyrax_1_1fakes_1_1FakeResponse.html#af6b6ac953f8f4b50f71fb020972f410b',1,'pyrax::fakes::FakeResponse']]],
['host',['host',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a832ddc04754e8a43d4f3c6165b1294a7',1,'pyrax::clouddatabases::CloudDatabaseUser']]],
['href',['href',['../classpyrax_1_1queueing_1_1QueueMessage.html#aecfca4286e302d5d945be6fe76b99c86',1,'pyrax::queueing::QueueMessage.href()'],['../classpyrax_1_1queueing_1_1QueueClaim.html#ab8d8e60d0ff1588f6381ad0bef8ad4b7',1,'pyrax::queueing::QueueClaim.href()']]],
- ['http_5flog_5fdebug',['http_log_debug',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseIdentity.http_log_debug()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::cf_wrapper::client::Connection::http_log_debug()'],['../classpyrax_1_1client_1_1BaseClient.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::client::BaseClient.http_log_debug()']]],
+ ['http_5flog_5fdebug',['http_log_debug',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseIdentity.http_log_debug()'],['../classpyrax_1_1client_1_1BaseClient.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::client::BaseClient.http_log_debug()']]],
['http_5fstatus',['http_status',['../classpyrax_1_1exceptions_1_1BadRequest.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::BadRequest::http_status()'],['../classpyrax_1_1exceptions_1_1Unauthorized.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::Unauthorized::http_status()'],['../classpyrax_1_1exceptions_1_1Forbidden.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::Forbidden::http_status()'],['../classpyrax_1_1exceptions_1_1NotFound.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::NotFound::http_status()'],['../classpyrax_1_1exceptions_1_1NoUniqueMatch.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::NoUniqueMatch::http_status()'],['../classpyrax_1_1exceptions_1_1OverLimit.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::OverLimit::http_status()'],['../classpyrax_1_1exceptions_1_1HTTPNotImplemented.html#adc16a229378030a650cd7e8d6dc16677',1,'pyrax::exceptions::HTTPNotImplemented::http_status()']]],
['human_5fid',['HUMAN_ID',['../classpyrax_1_1resource_1_1BaseResource.html#a494d50825f5dfc848a56d8a568c16172',1,'pyrax::resource::BaseResource']]]
];
diff --git a/docs/html/search/variables_69.js b/docs/html/search/variables_69.js
index e743652f..fdb47b2f 100644
--- a/docs/html/search/variables_69.js
+++ b/docs/html/search/variables_69.js
@@ -2,11 +2,11 @@ var searchData=
[
['id',['id',['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::clouddns::CloudDNSPTRRecord.id()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::Node.id()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudloadbalancers::VirtualIP.id()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::cloudnetworks::CloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeServer.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeServer::id()'],['../classpyrax_1_1fakes_1_1FakeService.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeService.id()'],['../classpyrax_1_1fakes_1_1FakeEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeEntity::id()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDatabaseInstance::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageVolume::id()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeBlockStorageSnapshot::id()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeLoadBalancer::id()'],['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#a0e43f6071072440917ee2dd8af07d251',1,'pyrax::fakes::FakeStatusChanger.id()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDomain::id()'],['../classpyrax_1_1fakes_1_1FakeDNSDevice.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeDNSDevice::id()'],['../classpyrax_1_1fakes_1_1FakeCloudNetwork.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudNetwork::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScalePolicy.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScalePolicy::id()'],['../classpyrax_1_1fakes_1_1FakeAutoScaleWebhook.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeAutoScaleWebhook::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroupManager::id()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeScalingGroup.id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorEntity.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorEntity::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorCheck.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorCheck::id()'],['../classpyrax_1_1fakes_1_1FakeCloudMonitorNotification.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeCloudMonitorNotification::id()'],['../classpyrax_1_1fakes_1_1FakeQueueManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeQueueManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageMemberManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageMemberManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageTagManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageTagManager::id()'],['../classpyrax_1_1fakes_1_1FakeImageManager.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::fakes::FakeImageManager.id()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueMessage::id()'],['../classpyrax_1_1queueing_1_1QueueClaim.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::queueing::QueueClaim::id()'],['../classpyrax_1_1resource_1_1BaseResource.html#acf2488b95c97e0378c9bf49de3b50f28',1,'pyrax::resource::BaseResource::id()']]],
['identity',['identity',['../classpyrax_1_1base__identity_1_1Service.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::base_identity::Service::identity()'],['../classpyrax_1_1base__identity_1_1Endpoint.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::base_identity::Endpoint.identity()'],['../classpyrax_1_1client_1_1BaseClient.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::client::BaseClient.identity()'],['../classpyrax_1_1fakes_1_1FakeClient.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::fakes::FakeClient::identity()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax::fakes::FakeIdentityService::identity()'],['../namespacepyrax.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax.identity()']]],
- ['ignore',['ignore',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a0e575fb50e8e0cc27c24104a3ced5a5c',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['ignore',['ignore',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a0e575fb50e8e0cc27c24104a3ced5a5c',1,'pyrax::object_storage::FolderUploader']]],
['images',['images',['../classpyrax_1_1fakes_1_1FakeCSClient.html#a51dcdeb45e5f187043150dc943c52faf',1,'pyrax::fakes::FakeCSClient.images()'],['../namespacepyrax.html#a51dcdeb45e5f187043150dc943c52faf',1,'pyrax.images()']]],
['in_5fsetup',['in_setup',['../namespacepyrax.html#aee18dc40b08b618d107a4dc24a9e0459',1,'pyrax']]],
['install_5frequires',['install_requires',['../namespacesetup.html#af13461461c50ae271e468b6b20d1f831',1,'setup']]],
['instance',['instance',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a5ffaf17e178b3a6fa2012fe3050ede22',1,'pyrax::clouddatabases::CloudDatabaseVolume::instance()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#a5ffaf17e178b3a6fa2012fe3050ede22',1,'pyrax::fakes::FakeDatabaseVolume::instance()']]],
- ['interval',['interval',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::cf_wrapper::client::CFClient.interval()'],['../classpyrax_1_1utils_1_1__WaitThread.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::utils::_WaitThread.interval()']]],
+ ['interval',['interval',['../classpyrax_1_1object__storage_1_1StorageClient.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::object_storage::StorageClient.interval()'],['../classpyrax_1_1utils_1_1__WaitThread.html#a943af1103d1f1365d6c7f31b331119bf',1,'pyrax::utils::_WaitThread.interval()']]],
['ip_5fversion',['ip_version',['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#a34b83b8852b7ca0e7e93cbf0034ed69d',1,'pyrax::cloudloadbalancers::VirtualIP']]]
];
diff --git a/docs/html/search/variables_6c.js b/docs/html/search/variables_6c.js
index 29048fa1..7afadfbc 100644
--- a/docs/html/search/variables_6c.js
+++ b/docs/html/search/variables_6c.js
@@ -1,13 +1,9 @@
var searchData=
[
['label',['label',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a22f45a3cb4f074e609f58ebaeef0ecf9',1,'pyrax::cloudnetworks::CloudNetwork']]],
- ['last_5fmodified',['last_modified',['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::cf_wrapper::storage_object::StorageObject.last_modified()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::fakes::FakeStorageObject.last_modified()']]],
- ['list',['list',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a6bbb80367a84ef6bc36dcf82df1fea55',1,'pyrax::cf_wrapper::container::Container']]],
- ['list_5fcontainer_5fnames',['list_container_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a6cf761a9f573f933217359cc9d212ede',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainer_5fobject_5fnames',['list_container_object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a11a9aacdd8d2a50682a39b737e74db4d',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fcontainer_5fobjects',['list_container_objects',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a7d0081438a3cfaa2e36059525659f0f9',1,'pyrax::cf_wrapper::client::CFClient']]],
- ['list_5fdate_5fformat',['LIST_DATE_FORMAT',['../namespacepyrax_1_1cf__wrapper_1_1client.html#abd01608caf4565408309af08113eb2b0',1,'pyrax::cf_wrapper::client']]],
- ['list_5fmethod',['list_method',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::DomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::SubdomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::RecordResultsIterator::list_method()']]],
- ['list_5fobject_5fnames',['list_object_names',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ac15021a03873cdafa474dc19af1114f8',1,'pyrax::cf_wrapper::container::Container']]],
+ ['last_5fmodified',['last_modified',['../classpyrax_1_1fakes_1_1FakeStorageObject.html#aacadc30373e677c508e7b598fe832e32',1,'pyrax::fakes::FakeStorageObject']]],
+ ['limit',['limit',['../classpyrax_1_1utils_1_1ResultsIterator.html#a6e8e21280adfab4d1a5b4275b3aea590',1,'pyrax::utils::ResultsIterator']]],
+ ['list_5fcontainers',['list_containers',['../classpyrax_1_1object__storage_1_1StorageClient.html#a5b04a9306161e21c7f6409f993c095d8',1,'pyrax::object_storage::StorageClient']]],
+ ['list_5fmethod',['list_method',['../classpyrax_1_1clouddns_1_1DomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::DomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1SubdomainResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::SubdomainResultsIterator::list_method()'],['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::clouddns::RecordResultsIterator::list_method()'],['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::object_storage::StorageObjectIterator::list_method()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#aef1de03914a0c0e4a1e69d43e72a4dbc',1,'pyrax::utils::ResultsIterator.list_method()']]],
['loadbalancers',['loadbalancers',['../classpyrax_1_1fakes_1_1FakeService.html#a287295743073106bcc78bdb30f4d3f37',1,'pyrax::fakes::FakeService']]]
];
diff --git a/docs/html/search/variables_6d.js b/docs/html/search/variables_6d.js
index aef0d21b..1ff6916e 100644
--- a/docs/html/search/variables_6d.js
+++ b/docs/html/search/variables_6d.js
@@ -1,13 +1,15 @@
var searchData=
[
['management_5furl',['management_url',['../classpyrax_1_1client_1_1BaseClient.html#a0e7003a466834b21ae00b9640955da9f',1,'pyrax::client::BaseClient']]],
- ['manager',['manager',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::clouddns::ResultsIterator::manager()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDatabaseInstance.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageVolume.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageSnapshot.manager()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeLoadBalancer.manager()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDNSDomain.manager()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeScalingGroup.manager()'],['../classpyrax_1_1resource_1_1BaseResource.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::resource::BaseResource.manager()']]],
+ ['manager',['manager',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::clouddns::ResultsIterator::manager()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeStorageObject::manager()'],['../classpyrax_1_1fakes_1_1FakeDatabaseInstance.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDatabaseInstance.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageVolume.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageVolume.manager()'],['../classpyrax_1_1fakes_1_1FakeBlockStorageSnapshot.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeBlockStorageSnapshot.manager()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeLoadBalancer.manager()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeDNSDomain.manager()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::fakes::FakeScalingGroup.manager()'],['../classpyrax_1_1resource_1_1BaseResource.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::resource::BaseResource.manager()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a23416379944e641a8ad6bdbc95ef1859',1,'pyrax::utils::ResultsIterator::manager()']]],
+ ['marker',['marker',['../classpyrax_1_1utils_1_1ResultsIterator.html#a13369eabab3d7ad2773a340258a8fc43',1,'pyrax::utils::ResultsIterator']]],
+ ['marker_5fatt',['marker_att',['../classpyrax_1_1object__storage_1_1StorageObjectIterator.html#a3bd4bab533dbaa67307e4c19f5d8051a',1,'pyrax::object_storage::StorageObjectIterator.marker_att()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a3bd4bab533dbaa67307e4c19f5d8051a',1,'pyrax::utils::ResultsIterator.marker_att()']]],
['marker_5fpat',['marker_pat',['../namespacepyrax_1_1queueing.html#a4ee1e020cf80b7e79c3f93360c95c811',1,'pyrax::queueing']]],
- ['max_5fbulk_5fdelete',['MAX_BULK_DELETE',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a427058bc05da2dd18ad05697b19dd420',1,'pyrax::cf_wrapper::client']]],
- ['max_5ffile_5fsize',['max_file_size',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#a38c5b8bfe2405c63c56e3dec85a057bc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['max_5ffile_5fsize',['MAX_FILE_SIZE',['../namespacepyrax_1_1object__storage.html#aca54fca798cd98366d9792a054d11096',1,'pyrax::object_storage']]],
['max_5fsize',['MAX_SIZE',['../namespacepyrax_1_1cloudblockstorage.html#a395b0fb68a5628e06819cb4aa43631fe',1,'pyrax::cloudblockstorage']]],
['message',['message',['../classpyrax_1_1exceptions_1_1ClientException.html#ab8140947611504abcb64a4c277effcf5',1,'pyrax::exceptions::ClientException.message()'],['../classpyrax_1_1exceptions_1_1BadRequest.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::BadRequest.message()'],['../classpyrax_1_1exceptions_1_1Unauthorized.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::Unauthorized.message()'],['../classpyrax_1_1exceptions_1_1Forbidden.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::Forbidden.message()'],['../classpyrax_1_1exceptions_1_1NotFound.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::NotFound.message()'],['../classpyrax_1_1exceptions_1_1NoUniqueMatch.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::NoUniqueMatch.message()'],['../classpyrax_1_1exceptions_1_1OverLimit.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::OverLimit.message()'],['../classpyrax_1_1exceptions_1_1HTTPNotImplemented.html#ae1ed0d7a6f352c7ee3ad978429822c6f',1,'pyrax::exceptions::HTTPNotImplemented.message()']]],
['messages',['messages',['../classpyrax_1_1queueing_1_1QueueClaim.html#a7048605d09bb21159ccaab63402dc4e5',1,'pyrax::queueing::QueueClaim']]],
+ ['method_5fdict',['method_dict',['../classpyrax_1_1object__storage_1_1StorageClient.html#ad86c8bc27d283d04ce67b7acc0163d54',1,'pyrax::object_storage::StorageClient']]],
['min_5fsize',['MIN_SIZE',['../namespacepyrax_1_1cloudblockstorage.html#aaba5e7c5484ccde364fadc3e6a496b1f',1,'pyrax::cloudblockstorage']]],
['msg_5flimit',['MSG_LIMIT',['../namespacepyrax_1_1queueing.html#ae9142e29cab13b8a9c7b02ea91ba9695',1,'pyrax::queueing']]]
];
diff --git a/docs/html/search/variables_6e.js b/docs/html/search/variables_6e.js
index 202cd00b..99b8c2ad 100644
--- a/docs/html/search/variables_6e.js
+++ b/docs/html/search/variables_6e.js
@@ -1,9 +1,7 @@
var searchData=
[
- ['name',['name',['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::autoscale::AutoScaleClient::name()'],['../classpyrax_1_1base__identity_1_1Service.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::base_identity::Service.name()'],['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cf_wrapper::container::Container.name()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cf_wrapper::storage_object::StorageObject.name()'],['../classpyrax_1_1client_1_1BaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::client::BaseClient.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudblockstorage::CloudBlockStorageClient::name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddatabases::CloudDatabaseUser.name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddatabases::CloudDatabaseClient::name()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSPTRRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddns::CloudDNSClient::name()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudmonitoring::CloudMonitorClient::name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetworkClient::name()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeStorageObject.name()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeDNSDomain.name()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeScalingGroup.name()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeIdentityService.name()'],['../classpyrax_1_1image_1_1ImageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::image::ImageClient::name()'],['../classpyrax_1_1queueing_1_1Queue.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::queueing::Queue::name()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::queueing::QueueClient::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempfile::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempDirectory::name()'],['../namespacesetup.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'setup.name()']]],
+ ['name',['name',['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::autoscale::AutoScaleClient::name()'],['../classpyrax_1_1base__identity_1_1Service.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::base_identity::Service.name()'],['../classpyrax_1_1client_1_1BaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::client::BaseClient.name()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudblockstorage::CloudBlockStorageClient::name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddatabases::CloudDatabaseUser.name()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddatabases::CloudDatabaseClient::name()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::clouddns::CloudDNSPTRRecord.name()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::clouddns::CloudDNSClient::name()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::name()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudmonitoring::CloudMonitorClient::name()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::cloudnetworks::CloudNetworkClient::name()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeStorageObject.name()'],['../classpyrax_1_1fakes_1_1FakeDNSDomain.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeDNSDomain.name()'],['../classpyrax_1_1fakes_1_1FakeScalingGroup.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeScalingGroup.name()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeIdentityService.name()'],['../classpyrax_1_1image_1_1ImageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::image::ImageClient::name()'],['../classpyrax_1_1object__storage_1_1StorageClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::object_storage::StorageClient::name()'],['../classpyrax_1_1queueing_1_1Queue.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::queueing::Queue::name()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::queueing::QueueClient::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempfile::name()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::utils::SelfDeletingTempDirectory::name()'],['../namespacesetup.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'setup.name()']]],
['name_5fattr',['NAME_ATTR',['../classpyrax_1_1resource_1_1BaseResource.html#a74fac10a98253f8b0308159a33113ab9',1,'pyrax::resource::BaseResource']]],
- ['next_5furi',['next_uri',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::clouddns::ResultsIterator']]],
- ['no_5fsuch_5fcontainer_5fpattern',['no_such_container_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#ab3150aa95b9e341f9b4c3f11214a9097',1,'pyrax::cf_wrapper::client']]],
- ['no_5fsuch_5fobject_5fpattern',['no_such_object_pattern',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a8141ed8d74dd957f7bad8300a7fed3da',1,'pyrax::cf_wrapper::client']]],
+ ['next_5furi',['next_uri',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::clouddns::ResultsIterator.next_uri()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a52d2d557c979c7d47d2f6733f9bb30c7',1,'pyrax::utils::ResultsIterator.next_uri()']]],
['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aed91756449328e2c454e53e9c5e53936',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient::Node()'],['../classpyrax_1_1fakes_1_1FakeService.html#aed91756449328e2c454e53e9c5e53936',1,'pyrax::fakes::FakeService.Node()']]]
];
diff --git a/docs/html/search/variables_6f.js b/docs/html/search/variables_6f.js
index d50243bc..8f724dc9 100644
--- a/docs/html/search/variables_6f.js
+++ b/docs/html/search/variables_6f.js
@@ -1,7 +1,8 @@
var searchData=
[
['obj',['obj',['../classpyrax_1_1utils_1_1__WaitThread.html#a0cf19f82ec7d5b8a220277790b543a0d',1,'pyrax::utils::_WaitThread']]],
- ['object_5fcount',['object_count',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#adf84fc89f9e8786591953166a1fd9d52',1,'pyrax::cf_wrapper::container::Container']]],
- ['object_5fnames',['object_names',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a29873bda9d6c5d58a9bad90471708093',1,'pyrax::cf_wrapper::client::BulkDeleter']]],
+ ['object_5fmanager',['object_manager',['../classpyrax_1_1fakes_1_1FakeContainer.html#aa8156d802ae30ee808fbac51e1c2ae5d',1,'pyrax::fakes::FakeContainer::object_manager()'],['../classpyrax_1_1object__storage_1_1Container.html#aa8156d802ae30ee808fbac51e1c2ae5d',1,'pyrax::object_storage::Container.object_manager()']]],
+ ['object_5fmeta_5fprefix',['OBJECT_META_PREFIX',['../namespacepyrax_1_1object__storage.html#a2b07ad6d45716d1265a0d20a7dcc4d52',1,'pyrax::object_storage']]],
+ ['object_5fnames',['object_names',['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a29873bda9d6c5d58a9bad90471708093',1,'pyrax::object_storage::BulkDeleter']]],
['opth',['opth',['../namespacepyrax_1_1identity.html#a67950ac9ebe565380668e902b8b09e8f',1,'pyrax::identity']]]
];
diff --git a/docs/html/search/variables_70.js b/docs/html/search/variables_70.js
index e8c783f5..015366c2 100644
--- a/docs/html/search/variables_70.js
+++ b/docs/html/search/variables_70.js
@@ -13,7 +13,7 @@ var searchData=
['prefix',['prefix',['../classpyrax_1_1base__identity_1_1Service.html#ace96d70a929a737bb705aa0f539decaa',1,'pyrax::base_identity::Service.prefix()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#ace96d70a929a737bb705aa0f539decaa',1,'pyrax::fakes::FakeIdentityService.prefix()']]],
['priority',['priority',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a6a5183df4c54c3e28dc8dc704f2487d5',1,'pyrax::clouddns::CloudDNSRecord']]],
['private_5furl',['private_url',['../classpyrax_1_1base__identity_1_1Endpoint.html#a1e54df6815cad9c3931cf2be1068740a',1,'pyrax::base_identity::Endpoint']]],
- ['processed',['processed',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aff5b44290b180a195768e1e1a947e1dc',1,'pyrax::cf_wrapper::client::CFClient']]],
+ ['processed',['processed',['../classpyrax_1_1object__storage_1_1StorageClient.html#aff5b44290b180a195768e1e1a947e1dc',1,'pyrax::object_storage::StorageClient']]],
['pseudo_5fnetworks',['PSEUDO_NETWORKS',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a9222604bace99de894b6f5b7a5ce5b2d',1,'pyrax::cloudnetworks::CloudNetworkClient.PSEUDO_NETWORKS()'],['../namespacepyrax_1_1cloudnetworks.html#a38c15ff4244e5bd8cf394fab766e9d61',1,'pyrax::cloudnetworks.PSEUDO_NETWORKS()']]],
['public_5fnet_5fid',['PUBLIC_NET_ID',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#ad40d8530bc55f06ed9e3c64ddd55b53d',1,'pyrax::cloudnetworks::CloudNetworkClient.PUBLIC_NET_ID()'],['../namespacepyrax_1_1cloudnetworks.html#ab08316ceccd63a9b160cb4b587a3f35d',1,'pyrax::cloudnetworks.PUBLIC_NET_ID()']]],
['public_5furl',['public_url',['../classpyrax_1_1base__identity_1_1Endpoint.html#ad89ac698ae744bcb12725ace4c81d246',1,'pyrax::base_identity::Endpoint']]],
diff --git a/docs/html/search/variables_72.js b/docs/html/search/variables_72.js
index ec6e378c..2d120f07 100644
--- a/docs/html/search/variables_72.js
+++ b/docs/html/search/variables_72.js
@@ -11,8 +11,8 @@ var searchData=
['response_5fkey',['response_key',['../classpyrax_1_1fakes_1_1FakeDNSManager.html#ab74e33fd52b6ead303c8ecd584121a47',1,'pyrax::fakes::FakeDNSManager.response_key()'],['../classpyrax_1_1manager_1_1BaseManager.html#ab74e33fd52b6ead303c8ecd584121a47',1,'pyrax::manager::BaseManager.response_key()']]],
['response_5ftype',['response_type',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#a409fe3d3335b2e3b3c4ef0412f1e8546',1,'pyrax::fakes::FakeIdentityResponse']]],
['responses',['responses',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#af824c71003de1a6161256ec0fa125810',1,'pyrax::fakes::FakeIdentityResponse']]],
- ['results',['results',['../classpyrax_1_1cf__wrapper_1_1client_1_1BulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::cf_wrapper::client::BulkDeleter.results()'],['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::clouddns::ResultsIterator.results()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::fakes::FakeBulkDeleter::results()']]],
+ ['results',['results',['../classpyrax_1_1clouddns_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::clouddns::ResultsIterator.results()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::fakes::FakeBulkDeleter::results()'],['../classpyrax_1_1object__storage_1_1BulkDeleter.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::object_storage::BulkDeleter.results()'],['../classpyrax_1_1utils_1_1ResultsIterator.html#a339bb5524b06e496a6aaa0a97a4a8d21',1,'pyrax::utils::ResultsIterator.results()']]],
['retry_5finterval',['RETRY_INTERVAL',['../namespacepyrax_1_1cloudblockstorage.html#abc175296d7313060131bf7f6c2932cf4',1,'pyrax::cloudblockstorage']]],
- ['root_5ffolder',['root_folder',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a5f0b3f0b57ace7916c26401c56575116',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['root_5ffolder',['root_folder',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a5f0b3f0b57ace7916c26401c56575116',1,'pyrax::object_storage::FolderUploader']]],
['run',['run',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeFolderUploader.run()'],['../classpyrax_1_1fakes_1_1FakeBulkDeleter.html#a0f40b896b2461e250ebafd4e27b8ff54',1,'pyrax::fakes::FakeBulkDeleter.run()']]]
];
diff --git a/docs/html/search/variables_73.js b/docs/html/search/variables_73.js
index 7f30ecb6..da27c8f9 100644
--- a/docs/html/search/variables_73.js
+++ b/docs/html/search/variables_73.js
@@ -1,6 +1,5 @@
var searchData=
[
- ['safe_5fquote_5fchars',['SAFE_QUOTE_CHARS',['../namespacepyrax_1_1client.html#a8e0f4a21236e90f2e846cd833e963445',1,'pyrax::client']]],
['scaling_5fgroup',['scaling_group',['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#a7f23105293583afca652e62b3dc62613',1,'pyrax::autoscale::AutoScalePolicy']]],
['serverclientexception',['ServerClientException',['../namespacepyrax_1_1exceptions.html#a033b7e579f64b8616b8c34e2406e24d7',1,'pyrax::exceptions']]],
['servernotfound',['ServerNotFound',['../namespacepyrax_1_1exceptions.html#aa7887bc0806ad489b281e31ec228dcc3',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/variables_74.js b/docs/html/search/variables_74.js
index c8ecbb89..ba4a7a53 100644
--- a/docs/html/search/variables_74.js
+++ b/docs/html/search/variables_74.js
@@ -7,8 +7,7 @@ var searchData=
['times',['times',['../classpyrax_1_1client_1_1BaseClient.html#ac150111bafc331bafb353619452c5c5c',1,'pyrax::client::BaseClient']]],
['timings',['timings',['../classpyrax_1_1client_1_1BaseClient.html#a941dfe76ad38cb3692eac6ef7f0aec9b',1,'pyrax::client::BaseClient']]],
['token',['token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::base_identity::BaseIdentity.token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::fakes::FakeIdentity::token()']]],
- ['total_5fbytes',['total_bytes',['../classpyrax_1_1cf__wrapper_1_1container_1_1Container.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::cf_wrapper::container::Container.total_bytes()'],['../classpyrax_1_1cf__wrapper_1_1storage__object_1_1StorageObject.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::cf_wrapper::storage_object::StorageObject.total_bytes()'],['../classpyrax_1_1fakes_1_1FakeStorageObject.html#a15d97ed7e27cf9263c3bc520f95e1d82',1,'pyrax::fakes::FakeStorageObject.total_bytes()']]],
['trace',['trace',['../namespacepyrax_1_1utils.html#a1ef4c4162762c60a00cf44b5969127c5',1,'pyrax::utils']]],
- ['ttl',['ttl',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::cf_wrapper::client::FolderUploader.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSRecord.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSPTRRecord.ttl()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::queueing::QueueMessage.ttl()']]],
+ ['ttl',['ttl',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSRecord.ttl()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::clouddns::CloudDNSPTRRecord.ttl()'],['../classpyrax_1_1object__storage_1_1FolderUploader.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::object_storage::FolderUploader.ttl()'],['../classpyrax_1_1queueing_1_1QueueMessage.html#a24139992a63da93bef33b5c8e6adc8bf',1,'pyrax::queueing::QueueMessage.ttl()']]],
['type',['type',['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::clouddns::CloudDNSRecord.type()'],['../classpyrax_1_1clouddns_1_1CloudDNSPTRRecord.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::clouddns::CloudDNSPTRRecord::type()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::cloudloadbalancers::Node.type()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#a7aead736a07eaf25623ad7bfa1f0ee2d',1,'pyrax::cloudloadbalancers::VirtualIP::type()']]]
];
diff --git a/docs/html/search/variables_75.js b/docs/html/search/variables_75.js
index fe4d16ef..619353f9 100644
--- a/docs/html/search/variables_75.js
+++ b/docs/html/search/variables_75.js
@@ -1,11 +1,11 @@
var searchData=
[
- ['upload_5fkey',['upload_key',['../classpyrax_1_1cf__wrapper_1_1client_1_1FolderUploader.html#a699a1292b13ecfed10beb4ffcdf4f2e6',1,'pyrax::cf_wrapper::client::FolderUploader']]],
+ ['upload_5fkey',['upload_key',['../classpyrax_1_1object__storage_1_1FolderUploader.html#a699a1292b13ecfed10beb4ffcdf4f2e6',1,'pyrax::object_storage::FolderUploader']]],
['uri_5fbase',['uri_base',['../classpyrax_1_1fakes_1_1FakeDatabaseManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::fakes::FakeDatabaseManager::uri_base()'],['../classpyrax_1_1fakes_1_1FakeDNSManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::fakes::FakeDNSManager.uri_base()'],['../classpyrax_1_1manager_1_1BaseManager.html#a8fed07611f6d4a6507b40cfa41062e1f',1,'pyrax::manager::BaseManager.uri_base()']]],
- ['url',['url',['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#afcd5a3e84f2adb7f83fa6c99911f31e4',1,'pyrax::cf_wrapper::client::Connection.url()'],['../namespacesetup.html#aa03c1ef4c41f36b048cf58d5aade7653',1,'setup.url()']]],
+ ['url',['url',['../namespacesetup.html#aa03c1ef4c41f36b048cf58d5aade7653',1,'setup']]],
['used',['used',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#ab896e794c7918f3e8a6ca0f8339f1add',1,'pyrax::clouddatabases::CloudDatabaseVolume.used()'],['../classpyrax_1_1fakes_1_1FakeDatabaseVolume.html#ab896e794c7918f3e8a6ca0f8339f1add',1,'pyrax::fakes::FakeDatabaseVolume.used()']]],
['user',['user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a5cc32e366c87c4cb49e4309b75f57d64',1,'pyrax::base_identity::BaseIdentity']]],
- ['user_5fagent',['USER_AGENT',['../classpyrax_1_1fakes_1_1FakeClient.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeClient.USER_AGENT()'],['../classpyrax_1_1fakes_1_1FakeService.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeService.USER_AGENT()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::base_identity::BaseIdentity.user_agent()'],['../classpyrax_1_1cf__wrapper_1_1client_1_1Connection.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::cf_wrapper::client::Connection.user_agent()'],['../classpyrax_1_1client_1_1BaseClient.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::client::BaseClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeClient.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeService.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeService::user_agent()'],['../namespacepyrax.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax.USER_AGENT()']]],
+ ['user_5fagent',['USER_AGENT',['../classpyrax_1_1fakes_1_1FakeClient.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeClient.USER_AGENT()'],['../classpyrax_1_1fakes_1_1FakeService.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax::fakes::FakeService.USER_AGENT()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::base_identity::BaseIdentity.user_agent()'],['../classpyrax_1_1client_1_1BaseClient.html#ac1b27022e729d81b2b33590aea822188',1,'pyrax::client::BaseClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeClient.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeClient::user_agent()'],['../classpyrax_1_1fakes_1_1FakeService.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::fakes::FakeService::user_agent()'],['../namespacepyrax.html#af2dfe76f6f24fbcdfd28b75ed32ada24',1,'pyrax.USER_AGENT()']]],
['username',['username',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::base_identity::BaseIdentity::username()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::fakes::FakeIdentity::username()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::identity::rax_identity::RaxIdentity::username()']]],
['utc_5fapi_5fdate_5fpattern',['UTC_API_DATE_PATTERN',['../namespacepyrax_1_1base__identity.html#ae8b883633e3a4412236e6b4e798f73f6',1,'pyrax::base_identity']]]
];
diff --git a/docs/html/search/variables_76.js b/docs/html/search/variables_76.js
index 9b17bcb2..7685a42f 100644
--- a/docs/html/search/variables_76.js
+++ b/docs/html/search/variables_76.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['verbose',['verbose',['../classpyrax_1_1cf__wrapper_1_1client_1_1CFClient.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::cf_wrapper::client::CFClient.verbose()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread.verbose()']]],
+ ['verbose',['verbose',['../classpyrax_1_1object__storage_1_1StorageClient.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::object_storage::StorageClient.verbose()'],['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread.verbose()']]],
['verify_5fssl',['verify_ssl',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::base_identity::BaseIdentity.verify_ssl()'],['../classpyrax_1_1client_1_1BaseClient.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::client::BaseClient.verify_ssl()'],['../namespacepyrax_1_1http.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::http.verify_ssl()']]],
['version',['version',['../classpyrax_1_1client_1_1BaseClient.html#a4c7a521b8f1a0769c09bfa4a1fca7dab',1,'pyrax::client::BaseClient::version()'],['../namespacepyrax_1_1version.html#af9c8593b58583463efe6932e24c9d6e6',1,'pyrax::version::version()'],['../namespacesetup.html#a4c7a521b8f1a0769c09bfa4a1fca7dab',1,'setup.version()']]],
['version_5ftext',['version_text',['../namespacesetup.html#a8cca3ee1b7da971e256b2d0147f9329a',1,'setup']]],
diff --git a/docs/html/utils_8py.html b/docs/html/utils_8py.html
index b0f2d5db..15a2b99e 100644
--- a/docs/html/utils_8py.html
+++ b/docs/html/utils_8py.html
@@ -93,6 +93,8 @@
Convenience class for dealing with temporary folders and the files within them. More...
class DotDict
Dictionary subclass that allows accessing keys via dot notation. More...
+class ResultsIterator
+ This object will iterate over all the results for a given type of listing, no matter how many items exist. More...
class _WaitThread
Threading class to wait for object status in the background. More...
@@ -172,7 +174,7 @@
diff --git a/docs/html/version_8py.html b/docs/html/version_8py.html
index a8b2faf9..aa7b15b8 100644
--- a/docs/html/version_8py.html
+++ b/docs/html/version_8py.html
@@ -88,7 +88,7 @@
namespace pyrax::version
Variables
-string version = "1.8.2"
+string version = "1.9.0"
@@ -108,7 +108,7 @@
diff --git a/docs/images.md b/docs/images.md
index 304bd716..8d8ed751 100644
--- a/docs/images.md
+++ b/docs/images.md
@@ -98,7 +98,7 @@ success | The task completed successfully
failure | The task failed. When this happens, the `message` attribute of the task contains the reason for the failure.
## Importing an Image
-You may import images for your use b first uploading them to a container in your Cloud Files account. Once the image is there, you import it by calling:
+You may import images for your use by first uploading them to a container in your Cloud Files account. Once the image is there, you import it by calling:
task = imgs.import_task(img, cont[, img_format=None[, img_name=None]])
diff --git a/pyrax/__init__.py b/pyrax/__init__.py
index 13350a8b..b63526e5 100755
--- a/pyrax/__init__.py
+++ b/pyrax/__init__.py
@@ -27,13 +27,6 @@
The source code for pyrax can be found at:
http://github.com/rackspace/pyrax
-
-\package cf_wrapper
-
-This module wraps swiftclient , the Python client for OpenStack / Swift,
-providing an object-oriented interface to the Swift object store.
-
-It also adds in CDN functionality that is Rackspace-specific.
"""
from __future__ import absolute_import
@@ -41,6 +34,7 @@
import inspect
import logging
import os
+import re
import six.moves.configparser as ConfigParser
import warnings
@@ -60,9 +54,9 @@
from . import http
from . import version
- from .cf_wrapper import client as _cf
from novaclient import exceptions as _cs_exceptions
from novaclient import auth_plugin as _cs_auth_plugin
+ from novaclient.shell import OpenStackComputeShell as _cs_shell
from novaclient.v1_1 import client as _cs_client
from novaclient.v1_1.servers import Server as CloudServer
@@ -74,6 +68,7 @@
from .cloudnetworks import CloudNetworkClient
from .cloudmonitoring import CloudMonitorClient
from .image import ImageClient
+ from .object_storage import StorageClient
from .queueing import QueueClient
except ImportError:
# See if this is the result of the importing of version.py in setup.py
@@ -119,8 +114,8 @@
services = tuple()
_client_classes = {
- "object_store": _cf.CFClient,
"compute": _cs_client.Client,
+ "object_store": StorageClient,
"database": CloudDatabaseClient,
"load_balancer": CloudLoadBalancerClient,
"volume": CloudBlockStorageClient,
@@ -184,8 +179,10 @@ def get(self, key, env=None):
if env is None:
env = self.environment
try:
- return self._settings[env][key]
+ ret = self._settings[env][key]
except KeyError:
+ ret = None
+ if ret is None:
# See if it's set in the environment
if key == "identity_class":
# This is defined via the identity_type
@@ -196,9 +193,10 @@ def get(self, key, env=None):
else:
env_var = self.env_dct.get(key)
try:
- return os.environ[env_var]
+ ret = os.environ[env_var]
except KeyError:
- return None
+ ret = None
+ return ret
def set(self, key, val, env=None):
@@ -663,10 +661,12 @@ def connect_to_cloudservers(region=None, context=None, **kwargs):
# Service is not available
return
insecure = not get_setting("verify_ssl")
+ cs_shell = _cs_shell()
+ extensions = cs_shell._discover_extensions("1.1")
cloudservers = _cs_client.Client(context.username, context.password,
project_id=context.tenant_id, auth_url=context.auth_endpoint,
auth_system=id_type, region_name=region, service_type="compute",
- auth_plugin=auth_plugin, insecure=insecure,
+ auth_plugin=auth_plugin, insecure=insecure, extensions=extensions,
http_log_debug=_http_debug, **kwargs)
agt = cloudservers.client.USER_AGENT
cloudservers.client.USER_AGENT = _make_agent_name(agt)
@@ -694,46 +694,37 @@ def list_snapshots():
return [image for image in cloudservers.images.list()
if hasattr(image, "server")]
+ def find_images_by_name(expr):
+ """
+ Returns a list of images whose name contains the specified expression.
+ The value passed is treated as a regular expression, allowing for more
+ specific searches than simple wildcards. The matching is done in a
+ case-insensitive manner.
+ """
+ return [image for image in cloudservers.images.list()
+ if re.search(expr, image.name, re.I)]
+
cloudservers.list_base_images = list_base_images
cloudservers.list_snapshots = list_snapshots
+ cloudservers.find_images_by_name = find_images_by_name
cloudservers.identity = identity
return cloudservers
-def connect_to_cloudfiles(region=None, public=None, context=None):
- """
- Creates a client for working with cloud files. The default is to connect
- to the public URL; if you need to work with the ServiceNet connection, pass
- False to the 'public' parameter or set the "use_servicenet" setting to True.
- """
+def connect_to_cloudfiles(region=None, public=None):
+ """Creates a client for working with CloudFiles/Swift."""
if public is None:
is_public = not bool(get_setting("use_servicenet"))
else:
is_public = public
- # If a specific context is passed, use that. Otherwise, use the global
- # identity reference.
- context = context or identity
- region = _safe_region(region, context=context)
- cf_url = _get_service_endpoint(context, "object_store", region,
+ ret = _create_client(ep_name="object_store", region=region,
public=is_public)
- cloudfiles = None
- if not cf_url:
- # Service is not available
- return
- cdn_url = _get_service_endpoint(context, "object_cdn", region)
- ep_type = {True: "publicURL", False: "internalURL"}[is_public]
- opts = {"tenant_id": context.tenant_name, "auth_token": context.token,
- "endpoint_type": ep_type, "tenant_name": context.tenant_name,
- "object_storage_url": cf_url, "object_cdn_url": cdn_url,
- "region_name": region}
- verify_ssl = get_setting("verify_ssl")
- cloudfiles = _cf.CFClient(context.auth_endpoint, context.username,
- context.password, tenant_name=context.tenant_name,
- preauthurl=cf_url, preauthtoken=context.token, auth_version="2",
- os_options=opts, verify_ssl=verify_ssl, http_log_debug=_http_debug)
- cloudfiles.user_agent = _make_agent_name(cloudfiles.user_agent)
- cloudfiles.identity = identity
- return cloudfiles
+ if ret:
+ # Add CDN endpoints, if available
+ region = _safe_region(region)
+ ret.cdn_management_url = _get_service_endpoint(None, "object_cdn",
+ region, public=is_public)
+ return ret
@_require_auth
@@ -819,19 +810,6 @@ def set_http_debug(val):
autoscale, images, queues):
if svc is not None:
svc.http_log_debug = val
- # Need to manually add/remove the debug handler for swiftclient
- swift_logger = _cf._swift_client.logger
- if val:
- for handler in swift_logger.handlers:
- if isinstance(handler, logging.StreamHandler):
- # Already present
- return
- swift_logger.addHandler(logging.StreamHandler())
- swift_logger.setLevel(logging.DEBUG)
- else:
- for handler in swift_logger.handlers:
- if isinstance(handler, logging.StreamHandler):
- swift_logger.removeHandler(handler)
def get_encoding():
diff --git a/pyrax/autoscale.py b/pyrax/autoscale.py
index 758f527f..91fab8e3 100644
--- a/pyrax/autoscale.py
+++ b/pyrax/autoscale.py
@@ -17,6 +17,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import base64
+
import pyrax
from pyrax.client import BaseClient
from pyrax.cloudloadbalancers import CloudLoadBalancer
@@ -441,9 +443,9 @@ def update_launch_config(self, scaling_group, server_name=None, image=None,
largs = scaling_group.launchConfiguration.get("args", {})
srv_args = largs.get("server", {})
lb_args = largs.get("loadBalancers", {})
- flav = "%s" % flavor or srv_args.get("flavorRef")
- dconf = disk_config or srv_args.get("OS-DCF:diskConfig")
- pers = personality or srv_args.get("personality")
+ flav = flavor or srv_args.get("flavorRef")
+ dconf = disk_config or srv_args.get("OS-DCF:diskConfig", "AUTO")
+ pers = personality or srv_args.get("personality", [])
body = {"type": "launch_server",
"args": {
"server": {
@@ -451,13 +453,14 @@ def update_launch_config(self, scaling_group, server_name=None, image=None,
"imageRef": image or srv_args.get("imageRef"),
"flavorRef": flav,
"OS-DCF:diskConfig": dconf,
- "personality": pers,
"networks": networks or srv_args.get("networks"),
"metadata": metadata or srv_args.get("metadata"),
},
"loadBalancers": load_balancers or lb_args,
},
}
+ if pers:
+ body["args"]["server"]["personality"] = pers
key_name = key_name or srv_args.get("key_name")
if key_name:
body["args"]["server"] = key_name
@@ -765,6 +768,10 @@ def _create_body(self, name, cooldown, min_entities, max_entities,
metadata = {}
if personality is None:
personality = []
+ else:
+ for file in personality:
+ if "contents" in file:
+ file["contents"] = base64.b64encode(file["contents"])
if scaling_policies is None:
scaling_policies = []
group_config = self._create_group_config_body(name, cooldown,
diff --git a/pyrax/base_identity.py b/pyrax/base_identity.py
index a04e5157..580decbc 100644
--- a/pyrax/base_identity.py
+++ b/pyrax/base_identity.py
@@ -9,6 +9,7 @@
import json
import re
import requests
+import warnings
try:
import keyring
@@ -16,9 +17,9 @@
keyring = None
import pyrax
-from . import exceptions as exc
+from pyrax import exceptions as exc
from .resource import BaseResource
-from . import utils
+from . import utils as utils
_pat = r"""
@@ -179,7 +180,10 @@ def _get_client(self, public=True, cached=True, client_class=None):
# Already failed
raise clt
if cached and clt is not None:
- return clt
+ if client_class and not isinstance(clt, client_class):
+ clt = None
+ else:
+ return clt
# Create the client
special_class = bool(client_class)
if special_class:
@@ -244,13 +248,8 @@ def _create_client(self, clt_class, url, public=True, special=False):
Creates a client instance for the service.
"""
verify_ssl = pyrax.get_setting("verify_ssl")
- if not special and self.service == "object_store":
- # Swiftclient requires different parameters.
- client = pyrax.connect_to_cloudfiles(region=self.region,
- public=public, context=self.identity)
- client.identity = self.identity
- elif not special and self.service == "compute":
- # Novaclient also requires special handling.
+ if self.service == "compute" and not special:
+ # Novaclient requires different parameters.
client = pyrax.connect_to_cloudservers(region=self.region,
context=self.identity)
client.identity = self.identity
@@ -572,7 +571,7 @@ def _call(self, mthd, uri, admin, data, headers, std_headers):
def authenticate(self, username=None, password=None, api_key=None,
- tenant_id=None):
+ tenant_id=None, connect=False):
"""
Using the supplied credentials, connects to the specified
authentication endpoint and attempts to log in.
@@ -581,6 +580,9 @@ def authenticate(self, username=None, password=None, api_key=None,
previously-stored credentials can be used. If authentication is
successful, the token and service catalog information is stored, and
clients for each service and region are created.
+
+ The 'connect' parameter is retained for backwards compatibility. It no
+ longer has any effect.
"""
self.username = username or self.username or pyrax.get_setting(
"username")
diff --git a/pyrax/cf_wrapper/__init__.py b/pyrax/cf_wrapper/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/pyrax/cf_wrapper/client.py b/pyrax/cf_wrapper/client.py
deleted file mode 100644
index 4f6522df..00000000
--- a/pyrax/cf_wrapper/client.py
+++ /dev/null
@@ -1,1745 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Copyright (c)2012 Rackspace US, Inc.
-
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import logging
-import datetime
-from functools import wraps
-import hashlib
-import hmac
-# Use eventlet if available
-try:
- import eventlet.green.httplib as httplib
-except ImportError:
- import httplib
-import locale
-import math
-import os
-import re
-import socket
-import threading
-import time
-import urllib
-import urlparse
-import uuid
-import mimetypes
-
-import six
-
-from swiftclient import client as _swift_client
-import pyrax
-from pyrax.cf_wrapper.container import Container
-from pyrax.cf_wrapper.storage_object import StorageObject
-import pyrax.utils as utils
-import pyrax.exceptions as exc
-
-
-EARLY_DATE_STR = "1900-01-01T00:00:00"
-DATE_FORMAT = "%Y-%m-%dT%H:%M:%S"
-HEAD_DATE_FORMAT = "%a, %d %b %Y %H:%M:%S %Z"
-# Format of last_modified in list responses, reverse engineered from sample
-# responses at
-# http://docs.rackspace.com/files/api/v1/cf-devguide/content/
-# Serialized_List_Output-d1e1460.html
-LIST_DATE_FORMAT = "%Y-%m-%dT%H:%M:%S.%f"
-CONNECTION_TIMEOUT = 20
-CONNECTION_RETRIES = 5
-AUTH_ATTEMPTS = 2
-MAX_BULK_DELETE = 10000
-DEFAULT_CHUNKSIZE = 65536
-
-no_such_container_pattern = re.compile(
- r"Container (?:GET|HEAD) failed: .+/(.+) 404")
-no_such_object_pattern = re.compile(r"Object (?:GET|HEAD) failed: .+/(.+) 404")
-etag_fail_pat = r"Object PUT failed: .+/([^/]+)/(\S+) 422 Unprocessable Entity"
-etag_failed_pattern = re.compile(etag_fail_pat)
-
-
-def _close_swiftclient_conn(conn):
- """Swiftclient often leaves the connection open."""
- try:
- conn.http_conn[1].close()
- except Exception:
- pass
-
-
-def plug_hole_in_swiftclient_auth(clt, url):
- """
- This is necessary because swiftclient has an issue when a token expires and
- it needs to re-authenticate against Rackspace auth. It is a temporary
- workaround until we can fix swiftclient.
- """
- conn = clt.connection
- conn.token = clt.identity.token
- conn.url = url
-
-
-def handle_swiftclient_exception(fnc):
- @wraps(fnc)
- def _wrapped(self, *args, **kwargs):
- attempts = 0
- clt_url = self.connection.url
-
- while attempts < AUTH_ATTEMPTS:
- attempts += 1
- try:
- _close_swiftclient_conn(self.connection)
- ret = fnc(self, *args, **kwargs)
- return ret
- except _swift_client.ClientException as e:
- str_error = "%s" % e
- if e.http_status == 401:
- if attempts < AUTH_ATTEMPTS:
- # Assume it is an auth failure. Re-auth and retry.
- # NOTE: This is a hack to get around an apparent bug
- # in python-swiftclient when using Rackspace auth.
- self.identity.authenticate(connect=False)
- if self.identity.authenticated:
- self.plug_hole_in_swiftclient_auth(self, clt_url)
- continue
- elif e.http_status == 404:
- bad_container = no_such_container_pattern.search(str_error)
- if bad_container:
- raise exc.NoSuchContainer("Container '%s' doesn't exist"
- % bad_container.groups()[0])
- bad_object = no_such_object_pattern.search(str_error)
- if bad_object:
- raise exc.NoSuchObject("Object '%s' doesn't exist" %
- bad_object.groups()[0])
- failed_upload = etag_failed_pattern.search(str_error)
- if failed_upload:
- cont, fname = failed_upload.groups()
- raise exc.UploadFailed("Upload of file '%(fname)s' to "
- "container '%(cont)s' failed." % locals())
- # Not handled; re-raise
- raise
- return _wrapped
-
-
-def ensure_cdn(fnc):
- @wraps(fnc)
- def _wrapped(self, *args, **kwargs):
- if not self.connection.cdn_connection:
- raise exc.NotCDNEnabled("This service does not support "
- "CDN-enabled containers.")
- return fnc(self, *args, **kwargs)
- return _wrapped
-
-
-def _convert_head_object_last_modified_to_local(lm_str):
- # Need to convert last modified time to a datetime object.
- # Times are returned in default locale format, so we need to read
- # them as such, no matter what the locale setting may be.
- orig_locale = locale.getlocale(locale.LC_TIME)
- locale.setlocale(locale.LC_TIME, (None, None))
- try:
- tm_tuple = time.strptime(lm_str, HEAD_DATE_FORMAT)
- finally:
- locale.setlocale(locale.LC_TIME, orig_locale)
- dttm = datetime.datetime.fromtimestamp(time.mktime(tm_tuple))
- # Now convert it back to the format returned by GETting the object.
- dtstr = dttm.strftime(DATE_FORMAT)
- return dtstr
-
-
-def _convert_list_last_modified_to_local(attdict):
- if "last_modified" in attdict:
- attdict = attdict.copy()
- list_date_format_with_tz = LIST_DATE_FORMAT + " %Z"
- last_modified_utc = attdict["last_modified"] + " UTC"
- tm_tuple = time.strptime(last_modified_utc,
- list_date_format_with_tz)
- dttm = datetime.datetime.fromtimestamp(time.mktime(tm_tuple))
-
- dttm_with_micros = datetime.datetime.strptime(last_modified_utc,
- list_date_format_with_tz)
- # Round the date *up* in seconds, to match the last modified time
- # in head requests
- # https://review.openstack.org/#/c/55488/
- if dttm_with_micros.microsecond > 0:
- dttm += datetime.timedelta(seconds=1)
- attdict["last_modified"] = dttm.strftime(DATE_FORMAT)
- return attdict
-
-
-def _quote(val):
- if isinstance(val, six.text_type):
- val = val.encode("utf-8")
- return urllib.quote(val)
-
-
-
-class CFClient(object):
- """
- Wraps the calls to swiftclient with objects representing Containers
- and StorageObjects.
-
- These classes allow a developer to work with regular Python objects
- instead of calling functions that return primitive types.
- """
- # Defaults for CDN
- cdn_enabled = False
- default_cdn_ttl = 86400
- _container_cache = {}
- _cached_temp_url_key = ""
- # Upload size limit
- max_file_size = 5368709119 # 5GB - 1
- # Folder upload status dict. Each upload will generate its own UUID key.
- # The app can use that key query the status of the upload. This dict
- # will also be used to hold the flag to interrupt uploads in progress.
- folder_upload_status = {}
- # Interval in seconds between checks for completion of bulk deletes.
- bulk_delete_interval = 1
-
-
- def __init__(self, auth_endpoint, username, api_key=None, password=None,
- tenant_name=None, preauthurl=None, preauthtoken=None,
- auth_version="2", os_options=None, verify_ssl=True,
- http_log_debug=False):
- self.connection = None
- self.cdn_connection = None
- self.http_log_debug = http_log_debug
- self._http_log = _swift_client.http_log
- os.environ["SWIFTCLIENT_DEBUG"] = "True" if http_log_debug else ""
- self._make_connections(auth_endpoint, username, api_key, password,
- tenant_name=tenant_name, preauthurl=preauthurl,
- preauthtoken=preauthtoken, auth_version=auth_version,
- os_options=os_options, verify_ssl=verify_ssl,
- http_log_debug=http_log_debug)
-
-
- # Constants used in metadata headers
- @property
- def account_meta_prefix(self):
- return "X-Account-Meta-"
-
- @property
- def container_meta_prefix(self):
- return "X-Container-Meta-"
-
- @property
- def object_meta_prefix(self):
- return "X-Object-Meta-"
-
- @property
- def cdn_meta_prefix(self):
- return "X-Cdn-"
-
-
- def _make_connections(self, auth_endpoint, username, api_key, password,
- tenant_name=None, preauthurl=None, preauthtoken=None,
- auth_version="2", os_options=None, verify_ssl=True,
- http_log_debug=None):
- cdn_url = os_options.pop("object_cdn_url", None)
- pw_key = api_key or password
- insecure = not verify_ssl
- self.connection = Connection(authurl=auth_endpoint, user=username,
- key=pw_key, tenant_name=tenant_name, preauthurl=preauthurl,
- preauthtoken=preauthtoken, auth_version=auth_version,
- os_options=os_options, insecure=insecure,
- http_log_debug=http_log_debug)
- if cdn_url:
- self.connection._make_cdn_connection(cdn_url)
-
-
- def _massage_metakeys(self, dct, prfx):
- """
- Returns a copy of the supplied dictionary, prefixing any keys that do
- not begin with the specified prefix accordingly.
- """
- lowprefix = prfx.lower()
- ret = {}
- for k, v in dct.iteritems():
- if not k.lower().startswith(lowprefix):
- k = "%s%s" % (prfx, k)
- ret[k] = v
- return ret
-
-
- def _resolve_name(self, val):
- return val if isinstance(val, six.string_types) else val.name
-
-
- @handle_swiftclient_exception
- def get_account_metadata(self, prefix=None):
- headers = self.connection.head_account()
- if prefix is None:
- prefix = self.account_meta_prefix
- prefix = prefix.lower()
- ret = {}
- for hkey, hval in headers.iteritems():
- if hkey.lower().startswith(prefix):
- ret[hkey] = hval
- return ret
-
-
- @handle_swiftclient_exception
- def set_account_metadata(self, metadata, clear=False,
- extra_info=None, prefix=None):
- """
- Accepts a dictionary of metadata key/value pairs and updates the
- specified account metadata with them.
-
- If 'clear' is True, any existing metadata is deleted and only the
- passed metadata is retained. Otherwise, the values passed here update
- the account's metadata.
-
- 'extra_info' is an optional dictionary which will be populated with
- 'status', 'reason', and 'headers' keys from the underlying swiftclient
- call.
-
- By default, the standard account metadata prefix ('X-Account-Meta-') is
- prepended to the header name if it isn't present. For non-standard
- headers, you must include a non-None prefix, such as an empty string.
- """
- # Add the metadata prefix, if needed.
- if prefix is None:
- prefix = self.account_meta_prefix
- massaged = self._massage_metakeys(metadata, prefix)
- new_meta = {}
- if clear:
- curr_meta = self.get_account_metadata()
- for ckey in curr_meta:
- new_meta[ckey] = ""
- utils.case_insensitive_update(new_meta, massaged)
- self.connection.post_account(new_meta, response_dict=extra_info)
-
-
- @handle_swiftclient_exception
- def get_temp_url_key(self, cached=True):
- """
- Returns the current TempURL key, or None if it has not been set.
-
- By default the value returned is cached. To force an API call to get
- the current value on the server, pass `cached=False`.
- """
- meta = self._cached_temp_url_key
- if not cached or not meta:
- key = "%stemp-url-key" % self.account_meta_prefix.lower()
- meta = self.get_account_metadata().get(key)
- self._cached_temp_url_key = meta
- return meta
-
-
- @handle_swiftclient_exception
- def set_temp_url_key(self, key=None):
- """
- Sets the key for the Temporary URL for the account. It should be a key
- that is secret to the owner.
-
- If no key is provided, a UUID value will be generated and used. It can
- later be obtained by calling get_temp_url_key().
- """
- if key is None:
- key = uuid.uuid4().hex
- meta = {"Temp-Url-Key": key}
- self.set_account_metadata(meta)
- self._cached_temp_url_key = key
-
-
- def get_temp_url(self, container, obj, seconds, method="GET", key=None,
- cached=True):
- """
- Given a storage object in a container, returns a URL that can be used
- to access that object. The URL will expire after `seconds` seconds.
-
- The only methods supported are GET and PUT. Anything else will raise
- an InvalidTemporaryURLMethod exception.
-
- If you have your Temporary URL key, you can pass it in directly and
- potentially save an API call to retrieve it. If you don't pass in the
- key, and don't wish to use any cached value, pass `cached=False`.
- """
- cname = self._resolve_name(container)
- oname = self._resolve_name(obj)
- mod_method = method.upper().strip()
- if mod_method not in ("GET", "PUT"):
- raise exc.InvalidTemporaryURLMethod("Method must be either 'GET' "
- "or 'PUT'; received '%s'." % method)
- if not key:
- key = self.get_temp_url_key(cached=cached)
- if not key:
- raise exc.MissingTemporaryURLKey("You must set the key for "
- "Temporary URLs before you can generate them. This is "
- "done via the `set_temp_url_key()` method.")
- conn_url = self.connection.url
- v1pos = conn_url.index("/v1/")
- base_url = conn_url[:v1pos]
- path_parts = (conn_url[v1pos:], cname, oname)
- cleaned = (part.strip("/\\") for part in path_parts)
- pth = "/%s" % "/".join(cleaned)
- if isinstance(pth, six.text_type):
- pth = pth.encode(pyrax.get_encoding())
- expires = int(time.time() + int(seconds))
- hmac_body = "%s\n%s\n%s" % (mod_method, expires, pth)
- try:
- sig = hmac.new(key, hmac_body, hashlib.sha1).hexdigest()
- except TypeError as e:
- raise exc.UnicodePathError("Due to a bug in Python, the TempURL "
- "function only works with ASCII object paths.")
- temp_url = "%s%s?temp_url_sig=%s&temp_url_expires=%s" % (base_url, pth,
- sig, expires)
- return temp_url
-
-
- def delete_object_in_seconds(self, cont, obj, seconds,
- extra_info=None):
- """
- Sets the object in the specified container to be deleted after the
- specified number of seconds.
- """
- meta = {"X-Delete-After": str(seconds)}
- self.set_object_metadata(cont, obj, meta, prefix="", clear=True)
-
-
- @handle_swiftclient_exception
- def get_container_metadata(self, container, prefix=None):
- """Returns a dictionary containing the metadata for the container."""
- cname = self._resolve_name(container)
- headers = self.connection.head_container(cname)
- if prefix is None:
- prefix = self.container_meta_prefix
- prefix = prefix.lower()
- ret = {}
- for hkey, hval in headers.iteritems():
- if hkey.lower().startswith(prefix):
- ret[hkey] = hval
- return ret
-
-
- @handle_swiftclient_exception
- def set_container_metadata(self, container, metadata, clear=False,
- extra_info=None, prefix=None):
- """
- Accepts a dictionary of metadata key/value pairs and updates the
- specified container metadata with them.
-
- If 'clear' is True, any existing metadata is deleted and only the
- passed metadata is retained. Otherwise, the values passed here update
- the container's metadata.
-
- 'extra_info' is an optional dictionary which will be populated with
- 'status', 'reason', and 'headers' keys from the underlying swiftclient
- call.
-
- By default, the standard container metadata prefix
- ('X-Container-Meta-') is prepended to the header name if it isn't
- present. For non-standard headers, you must include a non-None prefix,
- such as an empty string.
- """
- # Add the metadata prefix, if needed.
- if prefix is None:
- prefix = self.container_meta_prefix
- massaged = self._massage_metakeys(metadata, prefix)
- cname = self._resolve_name(container)
- new_meta = {}
- if clear:
- curr_meta = self.get_container_metadata(cname)
- for ckey in curr_meta:
- new_meta[ckey] = ""
- utils.case_insensitive_update(new_meta, massaged)
- self.connection.post_container(cname, new_meta,
- response_dict=extra_info)
-
-
- @handle_swiftclient_exception
- def remove_container_metadata_key(self, container, key,
- prefix=None, extra_info=None):
- """
- Removes the specified key from the container's metadata. If the key
- does not exist in the metadata, nothing is done.
- """
- if prefix is None:
- prefix = self.container_meta_prefix
- prefix = prefix.lower()
- meta_dict = {key: ""}
- # Add the metadata prefix, if needed.
- massaged = self._massage_metakeys(meta_dict, prefix)
- cname = self._resolve_name(container)
- self.connection.post_container(cname, massaged,
- response_dict=extra_info)
-
-
- @ensure_cdn
- @handle_swiftclient_exception
- def get_container_cdn_metadata(self, container):
- """
- Returns a dictionary containing the CDN metadata for the container.
- """
- cname = self._resolve_name(container)
- response = self.connection.cdn_request("HEAD", [cname])
- headers = response.getheaders()
- # Read the response to force it to close for the next request.
- response.read()
- # headers is a list of 2-tuples instead of a dict.
- return dict(headers)
-
-
- @ensure_cdn
- @handle_swiftclient_exception
- def set_container_cdn_metadata(self, container, metadata):
- """
- Accepts a dictionary of metadata key/value pairs and updates
- the specified container metadata with them.
-
- NOTE: arbitrary metadata headers are not allowed. The only metadata
- you can update are: X-Log-Retention, X-CDN-enabled, and X-TTL.
- """
- ct = self.get_container(container)
- allowed = ("x-log-retention", "x-cdn-enabled", "x-ttl")
- hdrs = {}
- bad = []
- for mkey, mval in metadata.iteritems():
- if mkey.lower() not in allowed:
- bad.append(mkey)
- continue
- hdrs[mkey] = str(mval)
- if bad:
- raise exc.InvalidCDNMetadata("The only CDN metadata you can "
- "update are: X-Log-Retention, X-CDN-enabled, and X-TTL. "
- "Received the following illegal item(s): %s" %
- ", ".join(bad))
- response = self.connection.cdn_request("POST", [ct.name], hdrs=hdrs)
- response.close()
-
-
- @handle_swiftclient_exception
- def get_object_metadata(self, container, obj, prefix=None):
- """Retrieves any metadata for the specified object."""
- if prefix is None:
- prefix = self.object_meta_prefix
- cname = self._resolve_name(container)
- oname = self._resolve_name(obj)
- headers = self.connection.head_object(cname, oname)
- prefix = prefix.lower()
- ret = {}
- for hkey, hval in headers.iteritems():
- if hkey.lower().startswith(prefix):
- ret[hkey] = hval
- return ret
-
-
- @handle_swiftclient_exception
- def set_object_metadata(self, container, obj, metadata, clear=False,
- extra_info=None, prefix=None):
- """
- Accepts a dictionary of metadata key/value pairs and updates the
- specified object metadata with them.
-
- If 'clear' is True, any existing metadata is deleted and only the
- passed metadata is retained. Otherwise, the values passed here update
- the object's metadata.
-
- 'extra_info; is an optional dictionary which will be populated with
- 'status', 'reason', and 'headers' keys from the underlying swiftclient
- call.
-
- By default, the standard object metadata prefix ('X-Object-Meta-') is
- prepended to the header name if it isn't present. For non-standard
- headers, you must include a non-None prefix, such as an empty string.
- """
- # Add the metadata prefix, if needed.
- if prefix is None:
- prefix = self.object_meta_prefix
- massaged = self._massage_metakeys(metadata, prefix)
- cname = self._resolve_name(container)
- oname = self._resolve_name(obj)
- new_meta = {}
- # Note that the API for object POST is the opposite of that for
- # container POST: for objects, all current metadata is deleted,
- # whereas for containers you need to set the values to an empty
- # string to delete them.
- if not clear:
- obj_meta = self.get_object_metadata(cname, oname, prefix=prefix)
- new_meta = self._massage_metakeys(obj_meta, prefix)
- utils.case_insensitive_update(new_meta, massaged)
- # Remove any empty values, since the object metadata API will
- # store them.
- to_pop = []
- for key, val in new_meta.iteritems():
- if not val:
- to_pop.append(key)
- for key in to_pop:
- new_meta.pop(key)
- self.connection.post_object(cname, oname, new_meta,
- response_dict=extra_info)
-
-
- @handle_swiftclient_exception
- def remove_object_metadata_key(self, container, obj, key, prefix=None):
- """
- Removes the specified key from the storage object's metadata. If the
- key does not exist in the metadata, nothing is done.
- """
- self.set_object_metadata(container, obj, {key: ""}, prefix=prefix)
-
-
- @handle_swiftclient_exception
- def create_container(self, name, extra_info=None):
- """Creates a container with the specified name.
-
- 'extra_info' is an optional dictionary which will be
- populated with 'status', 'reason', and 'headers' keys from the
- underlying swiftclient call.
- """
- name = self._resolve_name(name)
- self.connection.put_container(name, response_dict=extra_info)
- return self.get_container(name)
-
-
- @handle_swiftclient_exception
- def delete_container(self, container, del_objects=False, extra_info=None):
- """
- Deletes the specified container. This will fail if the container
- still has objects stored in it; if that's the case and you want
- to delete the container anyway, set del_objects to True, and
- the container's objects will be deleted before the container is
- deleted.
-
- 'extra_info' is an optional dictionary which will be
- populated with 'status', 'reason', and 'headers' keys from the
- underlying swiftclient call.
- """
- self.remove_container_from_cache(container)
- cname = self._resolve_name(container)
- if del_objects:
- nms = self.get_container_object_names(cname, full_listing=True)
- self.bulk_delete(cname, nms, async=False)
- self.connection.delete_container(cname, response_dict=extra_info)
- return True
-
-
- def remove_container_from_cache(self, container):
- """Removes the container from the cache."""
- nm = self._resolve_name(container)
- self._container_cache.pop(nm, None)
-
-
- @handle_swiftclient_exception
- def delete_object(self, container, name, extra_info=None):
- """
- Deletes the specified object from the container.
-
- 'extra_info' is an optional dictionary which will be
- populated with 'status', 'reason', and 'headers' keys from the
- underlying swiftclient call.
- """
- ct = self.get_container(container)
- ct.remove_from_cache(name)
- oname = self._resolve_name(name)
- self.connection.delete_object(ct.name, oname,
- response_dict=extra_info)
- return True
-
-
- @handle_swiftclient_exception
- def bulk_delete(self, container, object_names, async=False):
- """
- Deletes multiple objects from a container in a single call.
-
- The bulk deletion call does not return until all of the specified
- objects have been processed. For large numbers of objects, this can
- take quite a while, so there is an 'async' parameter to give you the
- option to have this call return immediately. If 'async' is True, an
- object is returned with a 'completed' attribute that will be set to
- True as soon as the bulk deletion is complete, and a 'results'
- attribute that will contain a dictionary (described below) with the
- results of the bulk deletion.
-
- When deletion is complete the bulk deletion object's 'results'
- attribute will be populated with the information returned from the API
- call. In synchronous mode this is the value that is returned when the
- call completes. It is a dictionary with the following keys:
-
- deleted - the number of objects deleted
- not_found - the number of objects not found
- status - the HTTP return status code. '200 OK' indicates success
- errors - a list of any errors returned by the bulk delete call
-
- This isn't available in swiftclient yet, so it's using code patterned
- after the client code in that library.
- """
- deleter = BulkDeleter(self, container, object_names)
- deleter.start()
- if async:
- return deleter
- while not deleter.completed:
- time.sleep(self.bulk_delete_interval)
- return deleter.results
-
-
- @handle_swiftclient_exception
- def get_object(self, container, obj):
- """Returns a StorageObject instance for the object in the container."""
- cname = self._resolve_name(container)
- oname = self._resolve_name(obj)
- obj_info = self.connection.head_object(cname, oname)
- lm_str = obj_info["last-modified"]
- dtstr = _convert_head_object_last_modified_to_local(lm_str)
- obj = StorageObject(self, self.get_container(container),
- name=oname, content_type=obj_info["content-type"],
- total_bytes=int(obj_info["content-length"]),
- last_modified=dtstr, etag=obj_info["etag"])
- return obj
-
-
- @handle_swiftclient_exception
- def store_object(self, container, obj_name, data, content_type=None,
- etag=None, content_encoding=None, ttl=None, return_none=False,
- chunk_size=None, headers=None, extra_info=None):
- """
- Creates a new object in the specified container, and populates it with
- the given data. A StorageObject reference to the uploaded file
- will be returned, unless 'return_none' is set to True.
-
- 'chunk_size' represents the number of bytes of data to write; it
- defaults to 65536. It is used only if the the 'data' parameter is an
- object with a 'read' method; otherwise, it is ignored.
-
- If you wish to specify additional headers to be passed to the PUT
- request, pass them as a dict in the 'headers' parameter. It is the
- developer's responsibility to ensure that any headers are valid; pyrax
- does no checking.
-
- 'extra_info' is an optional dictionary which will be
- populated with 'status', 'reason', and 'headers' keys from the
- underlying swiftclient call.
- """
- cont = self.get_container(container)
- if headers is None:
- headers = {}
- if content_encoding is not None:
- headers["Content-Encoding"] = content_encoding
- if ttl is not None:
- headers["X-Delete-After"] = ttl
- if chunk_size and hasattr(data, "read"):
- # Chunked file-like object
- self.connection.put_object(cont.name, obj_name, contents=data,
- content_type=content_type, etag=etag, headers=headers,
- chunk_size=chunk_size, response_dict=extra_info)
- else:
- with utils.SelfDeletingTempfile() as tmp:
- with open(tmp, "wb") as tmpfile:
- try:
- tmpfile.write(data)
- except UnicodeEncodeError:
- udata = data.encode("utf-8")
- tmpfile.write(udata)
- with open(tmp, "rb") as tmpfile:
- self.connection.put_object(cont.name, obj_name,
- contents=tmpfile, content_type=content_type,
- etag=etag, headers=headers, chunk_size=chunk_size,
- response_dict=extra_info)
- if return_none:
- return None
- else:
- return self.get_object(container, obj_name)
-
-
- @handle_swiftclient_exception
- def copy_object(self, container, obj, new_container, new_obj_name=None,
- extra_info=None):
- """
- Copies the object to the new container, optionally giving it a new name.
- If you copy to the same container, you must supply a different name.
- """
- cont = self.get_container(container)
- obj = self.get_object(cont, obj)
- new_cont = self.get_container(new_container)
- if new_obj_name is None:
- new_obj_name = obj.name
- hdrs = {"X-Copy-From": "/%s/%s" % (cont.name, obj.name)}
- return self.connection.put_object(new_cont.name, new_obj_name,
- contents=None, headers=hdrs, response_dict=extra_info)
-
-
- @handle_swiftclient_exception
- def move_object(self, container, obj, new_container, new_obj_name=None,
- extra_info=None):
- """
- Works just like copy_object, except that the source object is deleted
- after a successful copy.
- """
- new_obj_etag = self.copy_object(container, obj, new_container,
- new_obj_name=new_obj_name, extra_info=extra_info)
- if new_obj_etag:
- # Copy succeeded; delete the original.
- self.delete_object(container, obj)
- return new_obj_etag
-
-
- @handle_swiftclient_exception
- def change_object_content_type(self, container, obj, new_ctype,
- guess=False, extra_info=None):
- """
- Copies object to itself, but applies a new content-type. The guess
- feature requires the container to be CDN-enabled. If not then the
- content-type must be supplied. If using guess with a CDN-enabled
- container, new_ctype can be set to None.
- Failure during the put will result in a swift exception.
- """
- cont = self.get_container(container)
- obj = self.get_object(cont, obj)
- if guess and cont.cdn_enabled:
- # Test against the CDN url to guess the content-type.
- obj_url = "%s/%s" % (cont.cdn_uri, obj.name)
- new_ctype = mimetypes.guess_type(obj_url)[0]
- hdrs = {"X-Copy-From": "/%s/%s" % (cont.name, obj.name)}
- self.connection.put_object(cont.name, obj.name, contents=None,
- headers=hdrs, content_type=new_ctype,
- response_dict=extra_info)
- cont.remove_from_cache(obj.name)
- return
-
- @handle_swiftclient_exception
- def upload_file(self, container, file_or_path, obj_name=None,
- content_type=None, etag=None, return_none=False,
- content_encoding=None, ttl=None, extra_info=None,
- content_length=None, headers=None):
- """
- Uploads the specified file to the container. If no name is supplied,
- the file's name will be used. Either a file path or an open file-like
- object may be supplied. A StorageObject reference to the uploaded file
- will be returned, unless 'return_none' is set to True.
-
- You may optionally set the `content_type` and `content_encoding`
- parameters; pyrax will create the appropriate headers when the object
- is stored.
-
- If the size of the file is known, it can be passed as `content_length`.
-
- If you wish to specify additional headers to be passed to the PUT
- request, pass them as a dict in the 'headers' parameter. It is the
- developer's responsibility to ensure that any headers are valid; pyrax
- does no checking.
-
- If you wish for the object to be temporary, specify the time it should
- be stored in seconds in the `ttl` parameter. If this is specified, the
- object will be deleted after that number of seconds.
- """
- # TODO-BC: response_dict when looping? as a list of them?
- cont = self.get_container(container)
-
- def get_file_size(fileobj):
- """Returns the size of a file-like object."""
- currpos = fileobj.tell()
- fileobj.seek(0, 2)
- total_size = fileobj.tell()
- fileobj.seek(currpos)
- return total_size
-
- def upload(fileobj, content_type, etag, headers):
- if isinstance(fileobj, six.string_types):
- # This is an empty directory file
- fsize = 0
- else:
- if content_length is None:
- fsize = get_file_size(fileobj)
- else:
- fsize = content_length
- if fsize <= self.max_file_size:
- # We can just upload it as-is.
- return self.connection.put_object(cont.name, obj_name,
- contents=fileobj, content_type=content_type,
- etag=etag, headers=headers, response_dict=extra_info)
- # Files larger than self.max_file_size must be segmented
- # and uploaded separately.
- num_segments = int(math.ceil(float(fsize) / self.max_file_size))
- digits = int(math.log10(num_segments)) + 1
- # NOTE: This could be greatly improved with threading or other
- # async design.
- for segment in six.moves.range(num_segments):
- sequence = str(segment + 1).zfill(digits)
- seg_name = "%s.%s" % (obj_name, sequence)
- with utils.SelfDeletingTempfile() as tmpname:
- with open(tmpname, "wb") as tmp:
- tmp.write(fileobj.read(self.max_file_size))
- with open(tmpname, "rb") as tmp:
- # We have to calculate the etag for each segment
- etag = utils.get_checksum(tmp)
- self.connection.put_object(cont.name, seg_name,
- contents=tmp, content_type=content_type,
- etag=etag, headers=headers,
- response_dict=extra_info)
- # Upload the manifest
- headers["X-Object-Manifest"] = "%s/%s." % (cont.name, obj_name)
- return self.connection.put_object(cont.name, obj_name,
- contents=None, headers=headers,
- response_dict=extra_info)
-
- ispath = isinstance(file_or_path, six.string_types)
- if ispath:
- # Make sure it exists
- if not os.path.exists(file_or_path):
- raise exc.FileNotFound("The file '%s' does not exist" %
- file_or_path)
- fname = os.path.basename(file_or_path)
- else:
- try:
- fname = os.path.basename(file_or_path.name)
- except AttributeError:
- fname = None
- if not obj_name:
- obj_name = fname
- if not obj_name:
- raise InvalidUploadID("No filename provided and/or it cannot be "
- "inferred from context")
-
- if headers is None:
- headers = {}
- if content_encoding is not None:
- headers["Content-Encoding"] = content_encoding
- if ttl is not None:
- headers["X-Delete-After"] = ttl
-
- if ispath and os.path.isfile(file_or_path):
- # Need to wrap the call in a context manager
- with open(file_or_path, "rb") as ff:
- upload(ff, content_type, etag, headers)
- else:
- upload(file_or_path, content_type, etag, headers)
- if return_none:
- return None
- else:
- return self.get_object(container, obj_name)
-
-
- def upload_folder(self, folder_path, container=None, ignore=None, ttl=None):
- """
- Convenience method for uploading an entire folder, including any
- sub-folders, to Cloud Files.
-
- All files will be uploaded to objects with the same name as the file.
- In the case of nested folders, files will be named with the full path
- relative to the base folder. E.g., if the folder you specify contains a
- folder named 'docs', and 'docs' contains a file named 'install.html',
- that file will be uploaded to an object named 'docs/install.html'.
-
- If 'container' is specified, the folder's contents will be uploaded to
- that container. If it is not specified, a new container with the same
- name as the specified folder will be created, and the files uploaded to
- this new container.
-
- You can selectively ignore files by passing either a single pattern or
- a list of patterns; these will be applied to the individual folder and
- file names, and any names that match any of the 'ignore' patterns will
- not be uploaded. The patterns should be standard *nix-style shell
- patterns; e.g., '*pyc' will ignore all files ending in 'pyc', such as
- 'program.pyc' and 'abcpyc'.
-
- The upload will happen asynchronously; in other words, the call to
- upload_folder() will generate a UUID and return a 2-tuple of (UUID,
- total_bytes) immediately. Uploading will happen in the background; your
- app can call get_uploaded(uuid) to get the current status of the
- upload. When the upload is complete, the value returned by
- get_uploaded(uuid) will match the total_bytes for the upload.
-
- If you start an upload and need to cancel it, call
- cancel_folder_upload(uuid), passing the uuid returned by the initial
- call. It will then be up to you to either keep or delete the
- partially-uploaded content.
-
- If you specify a `ttl` parameter, the uploaded files will be deleted
- after that number of seconds.
- """
- if not os.path.isdir(folder_path):
- raise exc.FolderNotFound("No such folder: '%s'" % folder_path)
-
- ignore = utils.coerce_string_to_list(ignore)
- total_bytes = utils.folder_size(folder_path, ignore)
- upload_key = str(uuid.uuid4())
- self.folder_upload_status[upload_key] = {"continue": True,
- "total_bytes": total_bytes,
- "uploaded": 0,
- }
- self._upload_folder_in_background(folder_path, container, ignore,
- upload_key, ttl)
- return (upload_key, total_bytes)
-
-
- def _upload_folder_in_background(self, folder_path, container, ignore,
- upload_key, ttl=None):
- """Runs the folder upload in the background."""
- uploader = FolderUploader(folder_path, container, ignore, upload_key,
- self, ttl=ttl)
- uploader.start()
-
-
- def sync_folder_to_container(self, folder_path, container, delete=False,
- include_hidden=False, ignore=None, ignore_timestamps=False,
- object_prefix="", verbose=False):
- """
- Compares the contents of the specified folder, and checks to make sure
- that the corresponding object is present in the specified container. If
- there is no remote object matching the local file, it is created. If a
- matching object exists, the etag is examined to determine if the object
- in the container matches the local file; if they differ, the container
- is updated with the local file if the local file is newer when
- `ignore_timestamps' is False (default). If `ignore_timestamps` is True,
- the object is overwritten with the local file contents whenever the
- etags differ. NOTE: the timestamp of a remote object is the time it was
- uploaded, not the original modification time of the file stored in that
- object. Unless 'include_hidden' is True, files beginning with an
- initial period are ignored.
-
- If the 'delete' option is True, any objects in the container that do
- not have corresponding files in the local folder are deleted.
-
- You can selectively ignore files by passing either a single pattern or
- a list of patterns; these will be applied to the individual folder and
- file names, and any names that match any of the 'ignore' patterns will
- not be uploaded. The patterns should be standard *nix-style shell
- patterns; e.g., '*pyc' will ignore all files ending in 'pyc', such as
- 'program.pyc' and 'abcpyc'.
-
- If `object_prefix` is set it will be appended to the object name when
- it is checked and uploaded to the container. For example, if you use
- sync_folder_to_container("folderToSync/", myContainer,
- object_prefix="imgFolder") it will upload the files to the
- container/imgFolder/... instead of just container/...
-
- Set `verbose` to True to make it print what is going on. It will
- show which files are being uploaded and which ones are not and why.
- """
- cont = self.get_container(container)
- self._local_files = []
- # Load a list of all the remote objects so we don't have to keep
- # hitting the service
- if verbose:
- log = logging.getLogger("pyrax")
- log.info("Loading remote object list (prefix=%s)", object_prefix)
- data = cont.get_objects(prefix=object_prefix, full_listing=True)
- self._remote_files = dict((d.name, d) for d in data)
- self._sync_folder_to_container(folder_path, cont, prefix="",
- delete=delete, include_hidden=include_hidden, ignore=ignore,
- ignore_timestamps=ignore_timestamps,
- object_prefix=object_prefix, verbose=verbose)
- # Unset the _remote_files
- self._remote_files = None
-
-
- def _sync_folder_to_container(self, folder_path, cont, prefix, delete,
- include_hidden, ignore, ignore_timestamps, object_prefix, verbose):
- """
- This is the internal method that is called recursively to handle
- nested folder structures.
- """
- fnames = os.listdir(folder_path)
- ignore = utils.coerce_string_to_list(ignore)
- log = logging.getLogger("pyrax")
- if not include_hidden:
- ignore.append(".*")
- for fname in fnames:
- if utils.match_pattern(fname, ignore):
- continue
- pth = os.path.join(folder_path, fname)
- if os.path.isdir(pth):
- subprefix = fname
- if prefix:
- subprefix = "%s/%s" % (prefix, subprefix)
- self._sync_folder_to_container(pth, cont, prefix=subprefix,
- delete=delete, include_hidden=include_hidden,
- ignore=ignore, ignore_timestamps=ignore_timestamps,
- object_prefix=object_prefix, verbose=verbose)
- continue
- self._local_files.append(os.path.join(object_prefix, prefix, fname))
- local_etag = utils.get_checksum(pth)
- fullname = fname
- fullname_with_prefix = "%s/%s" % (object_prefix, fname)
- if prefix:
- fullname = "%s/%s" % (prefix, fname)
- fullname_with_prefix = "%s/%s/%s" % (object_prefix, prefix, fname)
- try:
- obj = self._remote_files[fullname_with_prefix]
- obj_etag = obj.etag
- except KeyError:
- obj = None
- obj_etag = None
- if local_etag != obj_etag:
- if not ignore_timestamps:
- if obj:
- obj_time_str = obj.last_modified[:19]
- else:
- obj_time_str = EARLY_DATE_STR
- local_mod = datetime.datetime.utcfromtimestamp(
- os.stat(pth).st_mtime)
- local_mod_str = local_mod.isoformat()
- if obj_time_str >= local_mod_str:
- # Remote object is newer
- if verbose:
- log.info("%s NOT UPLOADED because remote object is "
- "newer", fullname)
- continue
- cont.upload_file(pth, obj_name=fullname_with_prefix,
- etag=local_etag, return_none=True)
- if verbose:
- log.info("%s UPLOADED", fullname)
- else:
- if verbose:
- log.info("%s NOT UPLOADED because it already exists",
- fullname)
- if delete and not prefix:
- self._delete_objects_not_in_list(cont, object_prefix)
-
-
- def _delete_objects_not_in_list(self, cont, object_prefix=""):
- """
- Finds all the objects in the specified container that are not present
- in the self._local_files list, and deletes them.
- """
- objnames = set(cont.get_object_names(prefix=object_prefix,
- full_listing=True))
- localnames = set(self._local_files)
- to_delete = list(objnames.difference(localnames))
- # We don't need to wait around for this to complete. Store the thread
- # reference in case it is needed at some point.
- self._thread = self.bulk_delete(cont, to_delete, async=True)
-
-
- def _valid_upload_key(fnc):
- def wrapped(self, upload_key, *args, **kwargs):
- try:
- self.folder_upload_status[upload_key]
- except KeyError:
- raise exc.InvalidUploadID("There is no folder upload with the "
- "key '%s'." % upload_key)
- return fnc(self, upload_key, *args, **kwargs)
- return wrapped
-
-
- @_valid_upload_key
- def _update_progress(self, upload_key, size):
- self.folder_upload_status[upload_key]["uploaded"] += size
-
-
- @_valid_upload_key
- def get_uploaded(self, upload_key):
- """Returns the number of bytes uploaded for the specified process."""
- return self.folder_upload_status[upload_key]["uploaded"]
-
-
- @_valid_upload_key
- def cancel_folder_upload(self, upload_key):
- """
- Cancels any folder upload happening in the background. If there is no
- such upload in progress, calling this method has no effect.
- """
- self.folder_upload_status[upload_key]["continue"] = False
-
-
- @_valid_upload_key
- def _should_abort_folder_upload(self, upload_key):
- """
- Returns True if the user has canceled upload; returns False otherwise.
- """
- return not self.folder_upload_status[upload_key]["continue"]
-
-
- @handle_swiftclient_exception
- def fetch_object(self, container, obj, include_meta=False,
- chunk_size=None, size=None, extra_info=None):
- """
- Fetches the object from storage.
-
- If 'include_meta' is False, only the bytes representing the
- file is returned.
-
- Note: if 'chunk_size' is defined, you must fully read the object's
- contents before making another request.
-
- If 'size' is specified, only the first 'size' bytes of the object will
- be returned. If the object if smaller than 'size', the entire object is
- returned.
-
- When 'include_meta' is True, what is returned from this method is a
- 2-tuple:
- Element 0: a dictionary containing metadata about the file.
- Element 1: a stream of bytes representing the object's contents.
-
- 'extra_info' is an optional dictionary which will be
- populated with 'status', 'reason', and 'headers' keys from the
- underlying swiftclient call.
- """
- cname = self._resolve_name(container)
- oname = self._resolve_name(obj)
- (meta, data) = self.connection.get_object(cname, oname,
- resp_chunk_size=chunk_size, response_dict=extra_info)
- if include_meta:
- return (meta, data)
- else:
- return data
-
-
- @handle_swiftclient_exception
- def fetch_partial(self, container, obj, size):
- """
- Returns the first 'size' bytes of an object. If the object is smaller
- than the specified 'size' value, the entire object is returned.
- """
- gen = self.fetch_object(container, obj, chunk_size=size)
- ret = gen.next()
- _close_swiftclient_conn(self.connection)
- return ret
-
-
- def fetch_dlo(self, cont, name, chunk_size=None):
- """
- Returns a list of 2-tuples in the form of (object_name,
- fetch_generator) representing the components of a multi-part DLO
- (Dynamic Large Object). Each fetch_generator object can be interated
- to retrieve its contents.
-
- This is useful when transferring a DLO from one object storage system
- to another. Examples would be copying DLOs from one region of a
- provider to another, or copying a DLO from one provider to another.
- """
- if chunk_size is None:
- chunk_size = DEFAULT_CHUNKSIZE
-
- class FetchChunker(object):
- """
- Class that takes the generator objects returned by a chunked
- fetch_object() call and wraps them to behave as file-like objects for
- uploading.
- """
- def __init__(self, gen, verbose=False):
- self.gen = gen
- self.verbose = verbose
- self.processed = 0
- self.interval = 0
-
- def read(self, size=None):
- self.interval += 1
- if self.verbose:
- if self.interval > 1024:
- self.interval = 0
- logit(".")
- ret = self.gen.next()
- self.processed += len(ret)
- return ret
-
- parts = self.get_container_objects(cont, prefix=name)
- fetches = [(part.name, self.fetch_object(cont, part.name,
- chunk_size=chunk_size))
- for part in parts
- if part.name != name]
- job = [(fetch[0], FetchChunker(fetch[1], verbose=False))
- for fetch in fetches]
- return job
-
-
- @handle_swiftclient_exception
- def download_object(self, container, obj, directory, structure=True):
- """
- Fetches the object from storage, and writes it to the specified
- directory. The directory must exist before calling this method.
-
- If the object name represents a nested folder structure, such as
- "foo/bar/baz.txt", that folder structure will be created in the target
- directory by default. If you do not want the nested folders to be
- created, pass `structure=False` in the parameters.
- """
- if not os.path.isdir(directory):
- raise exc.FolderNotFound("The directory '%s' does not exist." %
- directory)
- obj_name = self._resolve_name(obj)
- path, fname = os.path.split(obj_name)
- if structure:
- fullpath = os.path.join(directory, path)
- if not os.path.exists(fullpath):
- os.makedirs(fullpath)
- target = os.path.join(fullpath, fname)
- else:
- target = os.path.join(directory, fname)
- with open(target, "wb") as dl:
- dl.write(self.fetch_object(container, obj))
-
-
- @handle_swiftclient_exception
- def get_all_containers(self, limit=None, marker=None, **parms):
- hdrs, conts = self.connection.get_container("", limit=limit,
- marker=marker)
- ret = [Container(self, name=cont["name"], object_count=cont["count"],
- total_bytes=cont["bytes"]) for cont in conts]
- return ret
-
-
- @handle_swiftclient_exception
- def get_container(self, container, cached=True):
- """
- Returns a reference to the specified container. By default, if a
- reference to that container has already been retrieved, a cached
- reference will be returned. If you need to get an updated version of
- the container, pass `cached=False` to the method call.
- """
- cname = self._resolve_name(container)
- if not cname:
- raise exc.MissingName("No container name specified")
- cont = None
- if cached:
- cont = self._container_cache.get(cname)
- if not cont:
- hdrs = self.connection.head_container(cname)
- cont = Container(self, name=cname,
- object_count=hdrs.get("x-container-object-count"),
- total_bytes=hdrs.get("x-container-bytes-used"))
- self._container_cache[cname] = cont
- return cont
- get = get_container
-
-
- @handle_swiftclient_exception
- def get_container_objects(self, container, marker=None, limit=None,
- prefix=None, delimiter=None, full_listing=False):
- """
- Return a list of StorageObjects representing the objects in the
- container. You can use the marker and limit params to handle pagination,
- and the prefix and delimiter params to filter the objects returned.
- Also, by default only the first 10,000 objects are returned; if you set
- full_listing to True, all objects in the container are returned.
- """
- cname = self._resolve_name(container)
- hdrs, objs = self.connection.get_container(cname, marker=marker,
- limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
- cont = self.get_container(cname)
- return [StorageObject(self,
- container=cont,
- attdict=_convert_list_last_modified_to_local(obj))
- for obj in objs
- if "name" in obj]
- list_container_objects = get_container_objects
-
-
- @handle_swiftclient_exception
- def get_container_object_names(self, container, marker=None, limit=None,
- prefix=None, delimiter=None, full_listing=False):
- cname = self._resolve_name(container)
- hdrs, objs = self.connection.get_container(cname, marker=marker,
- limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
- cont = self.get_container(cname)
- return [obj["name"] for obj in objs]
- list_container_object_names = get_container_object_names
-
-
- @handle_swiftclient_exception
- def list_container_subdirs(self, container, marker=None, limit=None,
- prefix=None, delimiter=None, full_listing=False):
- """
- Returns a list of StorageObjects representing the pseudo-subdirectories
- in the specified container. You can use the marker and limit params to
- handle pagination, and the prefix param to filter the objects returned.
- The 'delimiter' parameter is ignored, as the only meaningful value is
- '/'.
- """
- cname = self._resolve_name(container)
- hdrs, objs = self.connection.get_container(cname, marker=marker,
- limit=limit, prefix=prefix, delimiter="/",
- full_listing=full_listing)
- cont = self.get_container(cname)
- return [StorageObject(self, container=cont, attdict=obj) for obj in objs
- if "subdir" in obj]
-
-
- @handle_swiftclient_exception
- def get_info(self):
- """
- Returns a tuple for the number of containers and total bytes in
- the account.
- """
- hdrs = self.connection.head_container("")
- return (hdrs["x-account-container-count"], hdrs["x-account-bytes-used"])
-
-
- @handle_swiftclient_exception
- def list(self, limit=None, marker=None, **parms):
- """Returns a list of all container objects."""
- hdrs, conts = self.connection.get_container("", limit=limit,
- marker=marker)
- ret = [self.get_container(cont["name"]) for cont in conts]
- return ret
- get_all_containers = list
-
-
- @handle_swiftclient_exception
- def list_containers(self, limit=None, marker=None, **parms):
- """Returns a list of all container names as strings."""
- hdrs, conts = self.connection.get_container("", limit=limit,
- marker=marker)
- ret = [cont["name"] for cont in conts]
- return ret
- list_container_names = list_containers
-
-
- @handle_swiftclient_exception
- def list_containers_info(self, limit=None, marker=None, **parms):
- """Returns a list of info on Containers.
-
- For each container, a dict containing the following keys is returned:
- \code
- name - the name of the container
- count - the number of objects in the container
- bytes - the total bytes in the container
- """
- hdrs, conts = self.connection.get_container("", limit=limit,
- marker=marker)
- return conts
-
-
- @ensure_cdn
- @handle_swiftclient_exception
- def list_public_containers(self):
- """Returns a list of all CDN-enabled containers."""
- response = self.connection.cdn_request("GET", [""])
- status = response.status
- if not 200 <= status < 300:
- raise exc.CDNFailed("Bad response: (%s) %s" % (status,
- response.reason))
- return response.read().splitlines()
-
-
- def make_container_public(self, container, ttl=None):
- """Enables CDN access for the specified container."""
- return self._cdn_set_access(container, ttl, True)
-
-
- def make_container_private(self, container):
- """
- Disables CDN access to a container. It may still appear public until
- its TTL expires.
- """
- return self._cdn_set_access(container, None, False)
-
-
- @ensure_cdn
- def _cdn_set_access(self, container, ttl, enabled):
- """Used to enable or disable CDN access on a container."""
- if ttl is None:
- ttl = self.default_cdn_ttl
- ct = self.get_container(container)
- mthd = "PUT"
- hdrs = {"X-CDN-Enabled": "%s" % enabled}
- if enabled:
- hdrs["X-TTL"] = str(ttl)
- response = self.connection.cdn_request(mthd, [ct.name], hdrs=hdrs)
- status = response.status
- if not 200 <= status < 300:
- raise exc.CDNFailed("Bad response: (%s) %s" % (status,
- response.reason))
- ct.cdn_ttl = ttl
- for hdr in response.getheaders():
- if hdr[0].lower() == "x-cdn-uri":
- ct.cdn_uri = hdr[1]
- break
- self.remove_container_from_cache(container)
- # Read the response to force it to close for the next request.
- response.read()
-
-
- def set_cdn_log_retention(self, container, enabled):
- """
- Defer the logic to the container. It will end up calling
- _set_cdn_log_retention() to change it on Cloud Files.
- """
- cont = self.get_container(container)
- cont.cdn_log_retention = enabled
-
-
- @ensure_cdn
- def _set_cdn_log_retention(self, container, enabled):
- """This does the actual call to the Cloud Files API."""
- hdrs = {"X-Log-Retention": "%s" % enabled}
- cname = self._resolve_name(container)
- response = self.connection.cdn_request("POST", [cname], hdrs=hdrs)
- status = response.status
- if not 200 <= status < 300:
- raise exc.CDNFailed("Bad response: (%s) %s" % (status,
- response.reason))
- # Read the response to force it to close for the next request.
- response.read()
-
-
- def get_container_streaming_uri(self, container):
- """
- Returns the URI for streaming content, or None if CDN is not enabled.
- """
- cont = self.get_container(container)
- return cont.cdn_streaming_uri
-
-
- def get_container_ios_uri(self, container):
- """Returns the iOS URI, or None if CDN is not enabled."""
- cont = self.get_container(container)
- return cont.cdn_ios_uri
-
-
- def set_container_web_index_page(self, container, page):
- """
- Sets the header indicating the index page in a container
- when creating a static website.
-
- Note: the container must be CDN-enabled for this to have
- any effect.
- """
- hdr = {"X-Container-Meta-Web-Index": page}
- return self.set_container_metadata(container, hdr, clear=False)
-
-
- def set_container_web_error_page(self, container, page):
- """
- Sets the header indicating the error page in a container
- when creating a static website.
-
- Note: the container must be CDN-enabled for this to have
- any effect.
- """
- hdr = {"X-Container-Meta-Web-Error": page}
- return self.set_container_metadata(container, hdr, clear=False)
-
-
- @ensure_cdn
- @handle_swiftclient_exception
- def purge_cdn_object(self, container, name, email_addresses=None):
- ct = self.get_container(container)
- oname = self._resolve_name(name)
- if not ct.cdn_enabled:
- raise exc.NotCDNEnabled("The object '%s' is not in a "
- "CDN-enabled container." % oname)
- hdrs = {}
- if email_addresses:
- if not isinstance(email_addresses, (list, tuple)):
- email_addresses = [email_addresses]
- emls = ", ".join(email_addresses)
- hdrs = {"X-Purge-Email": emls}
- response = self.connection.cdn_request("DELETE", [ct.name, oname],
- hdrs=hdrs)
- # Read the response to force it to close for the next request.
- response.read()
- return True
-
-
- def _get_user_agent(self):
- return self.connection.user_agent
-
- def _set_user_agent(self, val):
- self.connection.user_agent = val
-
- user_agent = property(_get_user_agent, _set_user_agent)
-
-
- def _get_http_log_debug(self):
- return self._http_log_debug
-
- def _set_http_log_debug(self, val):
- self._http_log_debug = val
- if val:
- os.environ["SWIFTCLIENT_DEBUG"] = "True"
- else:
- os.environ.pop("SWIFTCLIENT_DEBUG", False)
-
- http_log_debug = property(_get_http_log_debug, _set_http_log_debug, None,
- "Determines if all http traffic is logged to the display "
- "for debugging.")
-
-
-
-class Connection(_swift_client.Connection):
- """This class wraps the swiftclient connection, adding support for CDN"""
- def __init__(self, *args, **kwargs):
- self.http_log_debug = kwargs.pop("http_log_debug", False)
- self._http_log = _swift_client.http_log
- self.url = None
- super(Connection, self).__init__(*args, **kwargs)
- # Add the user_agent, if not defined
- try:
- self.user_agent
- except AttributeError:
- self.user_agent = "swiftclient"
- self.cdn_connection = None
-
-
- def _make_cdn_connection(self, cdn_url=None):
- if cdn_url is not None:
- self.cdn_url = cdn_url
- parsed = urlparse.urlparse(self.cdn_url)
- is_ssl = parsed.scheme == "https"
-
- # Verify hostnames are valid and parse a port spec (if any)
- match = re.match(r"([a-zA-Z0-9\-\.]+):?([0-9]{2,5})?", parsed.netloc)
- if match:
- (host, port) = match.groups()
- else:
- host = parsed.netloc
- port = None
- if not port:
- port = 443 if is_ssl else 80
- port = int(port)
- path = parsed.path.strip("/")
- conn_class = httplib.HTTPSConnection if is_ssl else httplib.HTTPConnection
- self.cdn_connection = conn_class(host, port, timeout=CONNECTION_TIMEOUT)
- self.cdn_connection.is_ssl = is_ssl
-
-
- def cdn_request(self, method, path=[], data="", hdrs=None):
- """
- Given a method (i.e. GET, PUT, POST, etc.), a path, data, header and
- metadata dicts, performs an http request against the CDN service.
-
- Taken directly from the cloudfiles library and modified for use here.
- """
- pth = "/".join([_quote(elem) for elem in path])
- uri_path = urlparse.urlparse(self.uri).path
- path = "%s/%s" % (uri_path.rstrip("/"), pth)
- headers = {"Content-Length": str(len(data)),
- "User-Agent": self.user_agent,
- "X-Auth-Token": self.token}
- if isinstance(hdrs, dict):
- headers.update(hdrs)
-
- attempt = 0
- response = None
- while attempt < CONNECTION_RETRIES:
- if attempt:
- # Last try failed; re-create the connection
- self._make_cdn_connection()
- try:
- self.cdn_connection.request(method, path, data, headers)
- response = self.cdn_connection.getresponse()
- except (socket.error, IOError, httplib.HTTPException) as e:
- response = None
- if response:
- if response.status == 401:
- self.identity.authenticate()
- headers["X-Auth-Token"] = self.identity.token
- else:
- break
- attempt += 1
- if self.http_log_debug:
- self._http_log((path, method), {"headers": headers, "data": data},
- response, "")
- return response
-
-
- @property
- def uri(self):
- return self.url
-
-
-
-class FolderUploader(threading.Thread):
- """
- Threading class to allow for uploading multiple files in the background.
- """
- def __init__(self, root_folder, container, ignore, upload_key, client,
- ttl=None):
- self.root_folder = root_folder.rstrip("/")
- if container:
- self.container = client.create_container(container)
- else:
- self.container = None
- self.ignore = utils.coerce_string_to_list(ignore)
- self.upload_key = upload_key
- self.ttl = ttl
- self.client = client
- threading.Thread.__init__(self)
-
- def folder_name_from_path(self, pth):
- """Convenience method that first strips trailing path separators."""
- return os.path.basename(pth.rstrip(os.sep))
-
- def upload_files_in_folder(self, arg, dirname, fnames):
- """Handles the iteration across files within a folder."""
- if utils.match_pattern(dirname, self.ignore):
- return False
- for fname in (nm for nm in fnames
- if not utils.match_pattern(nm, self.ignore)):
- if self.client._should_abort_folder_upload(self.upload_key):
- return
- full_path = os.path.join(dirname, fname)
- if os.path.isdir(full_path):
- # Skip folders; os.walk will include them in the next pass.
- continue
- obj_name = os.path.relpath(full_path, self.base_path)
- obj_size = os.stat(full_path).st_size
- self.client.upload_file(self.container, full_path,
- obj_name=obj_name, return_none=True, ttl=self.ttl)
- self.client._update_progress(self.upload_key, obj_size)
-
- def run(self):
- """Starts the uploading thread."""
- root_path, folder_name = os.path.split(self.root_folder)
- self.base_path = os.path.join(root_path, folder_name)
- os.path.walk(self.root_folder, self.upload_files_in_folder, None)
-
-
-
-class BulkDeleter(threading.Thread):
- """
- Threading class to allow for bulk deletion of objects from a container.
- """
- completed = False
- results = None
-
- def __init__(self, client, container, object_names):
- self.client = client
- self.container = container
- self.object_names = object_names
- threading.Thread.__init__(self)
-
-
- def run(self):
- client = self.client
- container = self.container
- object_names = self.object_names
- self.results = {"deleted": 0, "not_found": 0, "status": "",
- "errors": ""}
- res_keys = {"Number Deleted": "deleted",
- "Number Not Found": "not_found",
- "Response Status": "status",
- "Errors": "errors",
- }
- cname = client._resolve_name(container)
- parsed, conn = client.connection.http_connection()
- method = "DELETE"
- headers = {"X-Auth-Token": self.client.identity.token,
- "Content-type": "text/plain",
- }
- while object_names:
- this_batch, object_names = (object_names[:MAX_BULK_DELETE],
- object_names[MAX_BULK_DELETE:])
- obj_paths = ("%s/%s" % (cname, nm) for nm in this_batch)
- body = _quote("\n".join(obj_paths))
- pth = "%s/?bulk-delete=1" % parsed.path
- conn.request(method, pth, body, headers)
- resp = conn.getresponse()
- status = resp.status
- reason = resp.reason
- resp_body = resp.read()
- for resp_line in resp_body.splitlines():
- if not resp_line.strip():
- continue
- resp_key, val = resp_line.split(":", 1)
- result_key = res_keys.get(resp_key)
- if not result_key:
- continue
- if result_key in ("deleted", "not_found"):
- self.results[result_key] += int(val.strip())
- else:
- self.results[result_key] = val.strip()
- self.completed = True
diff --git a/pyrax/cf_wrapper/container.py b/pyrax/cf_wrapper/container.py
deleted file mode 100644
index cb057546..00000000
--- a/pyrax/cf_wrapper/container.py
+++ /dev/null
@@ -1,448 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Copyright (c)2012 Rackspace US, Inc.
-
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import pyrax
-
-# Used to indicate values that are lazy-loaded
-class Fault(object):
- def __nonzero__(self):
- return False
-
-FAULT = Fault()
-
-
-class Container(object):
- """Represents a CloudFiles container."""
- def __init__(self, client, name, object_count=None, total_bytes=None):
- self.client = client
- self.name = name
- self.object_count = int(object_count)
- self.total_bytes = int(total_bytes)
- self._cdn_uri = FAULT
- self._cdn_ttl = FAULT
- self._cdn_ssl_uri = FAULT
- self._cdn_streaming_uri = FAULT
- self._cdn_ios_uri = FAULT
- self._cdn_log_retention = FAULT
- self._object_cache = {}
-
-
- def _set_cdn_defaults(self):
- """Sets all the CDN-related attributes to default values."""
- self._cdn_uri = None
- self._cdn_ttl = self.client.default_cdn_ttl
- self._cdn_ssl_uri = None
- self._cdn_streaming_uri = None
- self._cdn_ios_uri = None
- self._cdn_log_retention = False
-
-
- def _fetch_cdn_data(self):
- """Fetches the object's CDN data from the CDN service"""
- if not self.client.cdn_enabled:
- # Not CDN enabled; set the defaults.
- self._set_cdn_defaults()
- return
- response = self.client.connection.cdn_request("HEAD", [self.name])
- if 200 <= response.status < 300:
- # Set defaults in case not all headers are present.
- self._set_cdn_defaults()
- for hdr in response.getheaders():
- low_hdr = hdr[0].lower()
- if low_hdr == "x-cdn-uri":
- self._cdn_uri = hdr[1]
- elif low_hdr == "x-ttl":
- self._cdn_ttl = int(hdr[1])
- elif low_hdr == "x-cdn-ssl-uri":
- self._cdn_ssl_uri = hdr[1]
- elif low_hdr == "x-cdn-streaming-uri":
- self._cdn_streaming_uri = hdr[1]
- elif low_hdr == "x-cdn-ios-uri":
- self._cdn_ios_uri = hdr[1]
- elif low_hdr == "x-log-retention":
- self._cdn_log_retention = (hdr[1] == "True")
- elif response.status == 404:
- # Not CDN enabled; set the defaults.
- self._set_cdn_defaults()
- # We need to read the response in order to clear it for
- # the next call
- response.read()
-
-
- def get_objects(self, marker=None, limit=None, prefix=None, delimiter=None,
- full_listing=False):
- """
- Returns a list of StorageObjects representing the objects in the
- container. You can use the marker and limit params to handle pagination,
- and the prefix and delimiter params to filter the objects returned.
- Also, by default only the first 10,000 objects are returned; if you set
- full_listing to True, all objects in the container are returned.
- """
- objs = self.client.get_container_objects(self.name, marker=marker,
- limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
- return objs
- list = get_objects
-
-
- def get_object(self, name, cached=True):
- """
- Return the StorageObject in this container with the specified name. By
- default, if a reference to that object has already been retrieved, a
- cached reference will be returned. If you need to get an updated
- version of the object, pass `cached=False` to the method call.
- """
- if isinstance(name, str):
- name = name.decode(pyrax.get_encoding())
- ret = None
- if cached:
- ret = self._object_cache.get(name)
- if not ret:
- ret = self.client.get_object(self, name)
- self._object_cache[name] = ret
- return ret
- get = get_object
-
-
- def get_object_names(self, marker=None, limit=None, prefix=None,
- delimiter=None, full_listing=False):
- """
- Returns a list of the names of all the objects in this container. The
- same pagination parameters apply as in self.get_objects().
- """
- return self.client.get_container_object_names(self.name, marker=marker,
- limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
- list_object_names = get_object_names
-
-
- def list_subdirs(self, marker=None, limit=None, prefix=None, delimiter=None,
- full_listing=False):
- """
- Return a list of StorageObjects representing the pseudo-subdirectories
- in this container. You can use the marker and limit params to handle
- pagination, and the prefix and delimiter params to filter the objects
- returned.
- """
- subdirs = self.client.list_container_subdirs(self.name, marker=marker,
- limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
- return subdirs
-
-
- def store_object(self, obj_name, data, content_type=None, etag=None,
- content_encoding=None, ttl=None, return_none=False,
- extra_info=None):
- """
- Creates a new object in this container, and populates it with
- the given data.
- """
- return self.client.store_object(self, obj_name, data,
- content_type=content_type, etag=etag,
- content_encoding=content_encoding, ttl=ttl,
- return_none=return_none, extra_info=extra_info)
-
-
- def upload_file(self, file_or_path, obj_name=None, content_type=None,
- etag=None, return_none=False, content_encoding=None, ttl=None,
- content_length=None):
- """
- Uploads the specified file to this container. If no name is supplied,
- the file's name will be used. Either a file path or an open file-like
- object may be supplied. A StorageObject reference to the uploaded file
- will be returned, unless 'return_none' is set to True.
- """
- return self.client.upload_file(self, file_or_path, obj_name=obj_name,
- content_type=content_type, etag=etag, return_none=return_none,
- content_encoding=content_encoding, ttl=ttl,
- content_length=content_length)
-
-
- def delete_object(self, obj):
- """Deletes the specified object from this container."""
- self.remove_from_cache(obj)
- return self.client.delete_object(self, obj)
-
-
- def delete_all_objects(self, async=False):
- """
- Deletes all objects from this container.
-
- By default the call will block until all objects have been deleted. By
- passing True for the 'async' parameter, this method will not block, and
- instead return an object that can be used to follow the progress of the
- deletion. When deletion is complete the bulk deletion object's
- 'results' attribute will be populated with the information returned
- from the API call. In synchronous mode this is the value that is
- returned when the call completes. It is a dictionary with the following
- keys:
-
- deleted - the number of objects deleted
- not_found - the number of objects not found
- status - the HTTP return status code. '200 OK' indicates success
- errors - a list of any errors returned by the bulk delete call
- """
- nms = self.get_object_names(full_listing=True)
- self.client.bulk_delete(self, nms, async=False)
-
-
- def remove_from_cache(self, obj):
- """Removes the object from the cache."""
- nm = self.client._resolve_name(obj)
- self._object_cache.pop(nm, None)
-
-
- def delete(self, del_objects=False):
- """
- Deletes this Container. If the container contains objects, the
- command will fail unless 'del_objects' is passed as True. In that
- case, each object will be deleted first, and then the container.
- """
- return self.client.delete_container(self.name, del_objects=del_objects)
-
-
- def fetch_object(self, obj_name, include_meta=False, chunk_size=None):
- """
- Fetches the object from storage.
-
- If 'include_meta' is False, only the bytes representing the
- file is returned.
-
- Note: if 'chunk_size' is defined, you must fully read the object's
- contents before making another request.
-
- When 'include_meta' is True, what is returned from this method is
- a 2-tuple:
- Element 0: a dictionary containing metadata about the file.
- Element 1: a stream of bytes representing the object's contents.
- """
- return self.client.fetch_object(self, obj_name,
- include_meta=include_meta, chunk_size=chunk_size)
-
-
- def download_object(self, obj_name, directory, structure=True):
- """
- Fetches the object from storage, and writes it to the specified
- directory. The directory must exist before calling this method.
-
- If the object name represents a nested folder structure, such as
- "foo/bar/baz.txt", that folder structure will be created in the target
- directory by default. If you do not want the nested folders to be
- created, pass `structure=False` in the parameters.
- """
- return self.client.download_object(self, obj_name, directory,
- structure=structure)
-
-
- def get_metadata(self, prefix=None):
- """
- Returns a dictionary containing the metadata for the container.
- """
- return self.client.get_container_metadata(self, prefix=prefix)
-
-
- def set_metadata(self, metadata, clear=False, prefix=None):
- """
- Accepts a dictionary of metadata key/value pairs and updates the
- specified container metadata with them.
-
- If 'clear' is True, any existing metadata is deleted and only the
- passed metadata is retained. Otherwise, the values passed here update
- the container's metadata.
-
- 'extra_info' is an optional dictionary which will be populated with
- 'status', 'reason', and 'headers' keys from the underlying swiftclient
- call.
-
- By default, the standard container metadata prefix
- ('X-Container-Meta-') is prepended to the header name if it isn't
- present. For non-standard headers, you must include a non-None prefix,
- such as an empty string.
- """
- return self.client.set_container_metadata(self, metadata, clear=clear,
- prefix=prefix)
-
-
- def remove_metadata_key(self, key, prefix=None):
- """
- Removes the specified key from the container's metadata. If the key
- does not exist in the metadata, nothing is done.
- """
- return self.client.remove_container_metadata_key(self, key,
- prefix=prefix)
-
-
- def set_web_index_page(self, page):
- """
- Sets the header indicating the index page for this container
- when creating a static website.
-
- Note: the container must be CDN-enabled for this to have
- any effect.
- """
- return self.client.set_container_web_index_page(self, page)
-
-
- def set_web_error_page(self, page):
- """
- Sets the header indicating the error page for this container
- when creating a static website.
-
- Note: the container must be CDN-enabled for this to have
- any effect.
- """
- return self.client.set_container_web_error_page(self, page)
-
-
- def make_public(self, ttl=None):
- """Enables CDN access for the specified container."""
- return self.client.make_container_public(self, ttl)
-
-
- def make_private(self):
- """
- Disables CDN access to this container. It may still appear public until
- its TTL expires.
- """
- return self.client.make_container_private(self)
-
-
- def copy_object(self, obj, new_container, new_obj_name=None,
- extra_info=None):
- """
- Copies the object to the new container, optionally giving it a new name.
- If you copy to the same container, you must supply a different name.
- """
- return self.client.copy_object(self, obj, new_container,
- new_obj_name=new_obj_name, extra_info=extra_info)
-
-
- def move_object(self, obj, new_container, new_obj_name=None,
- extra_info=None):
- """
- Works just like copy_object, except that the source object is deleted
- after a successful copy.
- """
- return self.client.move_object(self, obj, new_container,
- new_obj_name=new_obj_name, extra_info=extra_info)
-
-
- def change_object_content_type(self, obj, new_ctype, guess=False):
- """
- Copies object to itself, but applies a new content-type. The guess
- feature requires the container to be CDN-enabled. If not then the
- content-type must be supplied. If using guess with a CDN-enabled
- container, new_ctype can be set to None.
- Failure during the put will result in a swift exception.
- """
- self.client.change_object_content_type(self, obj, new_ctype=new_ctype,
- guess=guess)
-
-
- def get_temp_url(self, obj, seconds, method="GET"):
- """
- Returns a URL that can be used to access the specified object in this
- container. The URL will expire after `seconds` seconds.
-
- The only methods supported are GET and PUT. Anything else will raise
- an InvalidTemporaryURLMethod exception.
- """
- return self.client.get_temp_url(self, obj, seconds=seconds,
- method=method)
-
-
- def delete_object_in_seconds(self, obj, seconds):
- """
- Sets the object to be deleted after the specified number of seconds.
- """
- self.client.delete_object_in_seconds(self, obj, seconds)
-
-
- def __repr__(self):
- return "" % self.name
-
-
- # BEGIN - CDN property definitions ##
- @property
- def cdn_enabled(self):
- return bool(self.cdn_uri)
-
- def _get_cdn_log_retention(self):
- if self._cdn_log_retention is FAULT:
- self._fetch_cdn_data()
- return self._cdn_log_retention
-
- def _set_cdn_log_retention(self, val):
- self.client._set_cdn_log_retention(self, val)
- self._cdn_log_retention = val
-
-
- def _get_cdn_uri(self):
- if self._cdn_uri is FAULT:
- self._fetch_cdn_data()
- return self._cdn_uri
-
- def _set_cdn_uri(self, val):
- self._cdn_uri = val
-
-
- def _get_cdn_ttl(self):
- if self._cdn_ttl is FAULT:
- self._fetch_cdn_data()
- return self._cdn_ttl
-
- def _set_cdn_ttl(self, val):
- self._cdn_ttl = val
-
-
- def _get_cdn_ssl_uri(self):
- if self._cdn_ssl_uri is FAULT:
- self._fetch_cdn_data()
- return self._cdn_ssl_uri
-
- def _set_cdn_ssl_uri(self, val):
- self._cdn_ssl_uri = val
-
-
- def _get_cdn_streaming_uri(self):
- if self._cdn_streaming_uri is FAULT:
- self._fetch_cdn_data()
- return self._cdn_streaming_uri
-
- def _set_cdn_streaming_uri(self, val):
- self._cdn_streaming_uri = val
-
-
- def _get_cdn_ios_uri(self):
- if self._cdn_ios_uri is FAULT:
- self._fetch_cdn_data()
- return self._cdn_ios_uri
-
- def _set_cdn_ios_uri(self, val):
- self._cdn_ios_uri = val
-
-
- cdn_log_retention = property(_get_cdn_log_retention, _set_cdn_log_retention)
- cdn_uri = property(_get_cdn_uri, _set_cdn_uri)
- cdn_ttl = property(_get_cdn_ttl, _set_cdn_ttl)
- cdn_ssl_uri = property(_get_cdn_ssl_uri, _set_cdn_ssl_uri)
- cdn_streaming_uri = property(_get_cdn_streaming_uri, _set_cdn_streaming_uri)
- cdn_ios_uri = property(_get_cdn_ios_uri, _set_cdn_ios_uri)
- # END - CDN property definitions ##
diff --git a/pyrax/cf_wrapper/storage_object.py b/pyrax/cf_wrapper/storage_object.py
deleted file mode 100644
index 54dad378..00000000
--- a/pyrax/cf_wrapper/storage_object.py
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Copyright (c)2012 Rackspace US, Inc.
-
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import six
-
-class StorageObject(object):
- """Represents a CloudFiles storage object."""
- def __init__(self, client, container, name=None, total_bytes=None,
- content_type=None, last_modified=None, etag=None, attdict=None):
- """
- The object can either be initialized with individual params, or by
- passing the dict that is returned by swiftclient.
- """
- self.client = client
- if isinstance(container, six.string_types):
- self.container = self.client.get_container(container)
- else:
- self.container = container
- self.name = name
- self.total_bytes = total_bytes
- self.content_type = content_type
- self.last_modified = last_modified
- self.etag = etag
- if attdict:
- self._read_attdict(attdict)
-
-
- def _read_attdict(self, dct):
- """
- Populates the object attributes using the dict returned by swiftclient.
- """
- self.name = dct.get("name")
- if not self.name:
- # Could be a pseudo-subdirectory
- self.name = dct.get("subdir").rstrip("/")
- self.content_type = "pseudo/subdir"
- else:
- self.content_type = dct.get("content_type")
- self.total_bytes = dct.get("bytes")
- self.last_modified = dct.get("last_modified")
- self.etag = dct.get("hash")
-
-
- def get(self, include_meta=False, chunk_size=None):
- """
- Fetches the object from storage.
-
- If 'include_meta' is False, only the bytes representing the
- file is returned.
-
- Note: if 'chunk_size' is defined, you must fully read the object's
- contents before making another request.
-
- When 'include_meta' is True, what is returned from this method is a
- 2-tuple:
- Element 0: a dictionary containing metadata about the file.
- Element 1: a stream of bytes representing the object's contents.
- """
- return self.client.fetch_object(container=self.container.name,
- obj=self, include_meta=include_meta, chunk_size=chunk_size)
- # Changing the name of this method to 'fetch', as 'get' is overloaded.
- fetch = get
-
-
- def download(self, directory, structure=True):
- """
- Fetches the object from storage, and writes it to the specified
- directory. The directory must exist before calling this method.
-
- If the object name represents a nested folder structure, such as
- "foo/bar/baz.txt", that folder structure will be created in the target
- directory by default. If you do not want the nested folders to be
- created, pass `structure=False` in the parameters.
- """
- return self.client.download_object(self.container, self, directory,
- structure=structure)
-
-
- def delete(self):
- """Deletes the object from storage."""
- self.client.delete_object(container=self.container.name, name=self.name)
-
-
- def purge(self, email_addresses=[]):
- """
- Purges the object from the CDN network, sending an optional
- email confirmation.
- """
- self.client.purge_cdn_object(container=self.container.name,
- name=self.name, email_addresses=email_addresses)
-
-
- def get_metadata(self, prefix=None):
- """Returns this object's metadata."""
- return self.client.get_object_metadata(self.container, self,
- prefix=prefix)
-
-
- def set_metadata(self, metadata, clear=False, prefix=None):
- """
- Sets this object's metadata, optionally clearing existing metadata.
- """
- self.client.set_object_metadata(self.container, self, metadata,
- clear=clear, prefix=prefix)
-
-
- def remove_metadata_key(self, key, prefix=None):
- """
- Removes the specified key from the storage object's metadata. If the
- key does not exist in the metadata, nothing is done.
- """
- self.client.remove_object_metadata_key(self.container, self, key,
- prefix=prefix)
-
-
- def copy(self, new_container, new_obj_name=None, extra_info=None):
- """
- Copies this object to the new container, optionally giving it a new name.
- If you copy to the same container, you must supply a different name.
- """
- return self.container.copy_object(self, new_container,
- new_obj_name=new_obj_name, extra_info=extra_info)
-
-
- def move(self, new_container, new_obj_name=None, extra_info=None):
- """
- Works just like copy_object, except that this object is deleted after a
- successful copy. This means that this storage_object reference will no
- longer be valid.
- """
- return self.container.move_object(self, new_container,
- new_obj_name=new_obj_name, extra_info=extra_info)
-
-
- def change_content_type(self, new_ctype, guess=False):
- """
- Copies object to itself, but applies a new content-type. The guess
- feature requires the container to be CDN-enabled. If not then the
- content-type must be supplied. If using guess with a CDN-enabled
- container, new_ctype can be set to None.
- Failure during the put will result in a swift exception.
- """
- self.client.change_object_content_type(self.container, self,
- new_ctype=new_ctype, guess=guess)
-
-
- def get_temp_url(self, seconds, method="GET"):
- """
- Returns a URL that can be used to access this object. The URL will
- expire after `seconds` seconds.
-
- The only methods supported are GET and PUT. Anything else will raise
- an InvalidTemporaryURLMethod exception.
- """
- return self.client.get_temp_url(self.container, self, seconds=seconds,
- method=method)
-
-
- def delete_in_seconds(self, seconds):
- """
- Sets the object to be deleted after the specified number of seconds.
- """
- self.client.delete_object_in_seconds(self.container, self, seconds)
-
-
- def __repr__(self):
- return "" % (self.name, self.content_type)
diff --git a/pyrax/client.py b/pyrax/client.py
index 4f9bdeb4..0b8ab0a3 100644
--- a/pyrax/client.py
+++ b/pyrax/client.py
@@ -29,13 +29,23 @@
import logging
import requests
import time
-import urllib
-from six.moves.urllib import parse as urlparse
+import six.moves.urllib as urllib
import pyrax
import pyrax.exceptions as exc
-SAFE_QUOTE_CHARS = "/.?&=,"
+
+def _safe_quote(val):
+ """
+ Unicode values will raise a KeyError, so catch those and encode in UTF-8.
+ """
+ SAFE_QUOTE_CHARS = "/.?&=,"
+ try:
+ ret = urllib.parse.quote(val, safe=SAFE_QUOTE_CHARS)
+ except KeyError:
+ ret = urllib.parse.quote(val.encode("utf-8"), safe=SAFE_QUOTE_CHARS)
+ return ret
+
class BaseClient(object):
"""
@@ -165,6 +175,11 @@ def request(self, uri, method, *args, **kwargs):
kwargs.setdefault("headers", kwargs.get("headers", {}))
kwargs["headers"]["User-Agent"] = self.user_agent
kwargs["headers"]["Accept"] = "application/json"
+ if ("body" in kwargs) or ("data" in kwargs):
+ if "Content-Type" not in kwargs["headers"]:
+ kwargs["headers"]["Content-Type"] = "application/json"
+ elif kwargs["headers"]["Content-Type"] is None:
+ del kwargs["headers"]["Content-Type"]
# Allow subclasses to add their own headers
self._add_custom_headers(kwargs["headers"])
resp, body = pyrax.http.request(method, uri, *args, **kwargs)
@@ -198,16 +213,15 @@ def _api_request(self, uri, method, **kwargs):
raise exc.ServiceNotAvailable("The '%s' service is not available."
% self)
if uri.startswith("http"):
- parsed = list(urlparse.urlparse(uri))
+ parsed = list(urllib.parse.urlparse(uri))
for pos, item in enumerate(parsed):
if pos < 2:
# Don't escape the scheme or netloc
continue
- parsed[pos] = urllib.quote(parsed[pos], safe=SAFE_QUOTE_CHARS)
- safe_uri = urlparse.urlunparse(parsed)
+ parsed[pos] = _safe_quote(parsed[pos])
+ safe_uri = urllib.parse.urlunparse(parsed)
else:
- safe_uri = "%s%s" % (self.management_url,
- urllib.quote(uri, safe=SAFE_QUOTE_CHARS))
+ safe_uri = "%s%s" % (self.management_url, _safe_quote(uri))
# Perform the request once. If we get a 401 back then it
# might be because the auth token expired, so try to
# re-authenticate and try again. If it still fails, bail.
diff --git a/pyrax/cloudloadbalancers.py b/pyrax/cloudloadbalancers.py
index f242b43f..1af39642 100644
--- a/pyrax/cloudloadbalancers.py
+++ b/pyrax/cloudloadbalancers.py
@@ -85,9 +85,15 @@ def get_usage(self, start=None, end=None):
return self.manager.get_usage(self, start=start, end=end)
+ def get_stats(self):
+ """
+ Return the stats for this loadbalancer
+ """
+ return self.manager.get_stats(self)
+
def _add_details(self, info):
"""Override the base behavior to add Nodes, VirtualIPs, etc."""
- for (key, val) in info.iteritems():
+ for (key, val) in six.iteritems(info):
if key == "nodes":
val = [Node(parent=self, **nd) for nd in val]
elif key == "sessionPersistence":
@@ -956,7 +962,7 @@ def get_usage(self, loadbalancer=None, start=None, end=None):
return body
- def get_stats(self, loadbalancer):
+ def get_stats(self, loadbalancer=None):
"""
Returns statistics for the given load balancer.
"""
diff --git a/pyrax/exceptions.py b/pyrax/exceptions.py
index 169f76d1..c73af611 100644
--- a/pyrax/exceptions.py
+++ b/pyrax/exceptions.py
@@ -254,6 +254,9 @@ class NoEndpointForRegion(PyraxException):
class NoEndpointForService(PyraxException):
pass
+class NoContentSpecified(PyraxException):
+ pass
+
class NoMoreResults(PyraxException):
pass
@@ -478,6 +481,8 @@ def from_response(response, body):
else:
message = error
details = None
+ else:
+ message = body
return cls(code=status, message=message, details=details,
request_id=request_id)
else:
diff --git a/pyrax/fakes.py b/pyrax/fakes.py
index 2b7db642..45909007 100644
--- a/pyrax/fakes.py
+++ b/pyrax/fakes.py
@@ -12,10 +12,6 @@
from pyrax.autoscale import AutoScaleWebhook
from pyrax.autoscale import ScalingGroup
from pyrax.autoscale import ScalingGroupManager
-from pyrax.cf_wrapper.client import BulkDeleter
-from pyrax.cf_wrapper.client import FolderUploader
-from pyrax.cf_wrapper.container import Container
-from pyrax.cf_wrapper.storage_object import StorageObject
from pyrax.client import BaseClient
from pyrax.clouddatabases import CloudDatabaseClient
from pyrax.clouddatabases import CloudDatabaseDatabaseManager
@@ -49,6 +45,13 @@
from pyrax.image import ImageManager
from pyrax.image import ImageMemberManager
from pyrax.image import ImageTagManager
+from pyrax.object_storage import BulkDeleter
+from pyrax.object_storage import Container
+from pyrax.object_storage import ContainerManager
+from pyrax.object_storage import FolderUploader
+from pyrax.object_storage import StorageClient
+from pyrax.object_storage import StorageObject
+from pyrax.object_storage import StorageObjectManager
from pyrax.queueing import Queue
from pyrax.queueing import QueueClaim
from pyrax.queueing import QueueMessage
@@ -91,12 +94,17 @@ def read(self):
return "Line1\nLine2"
def get(self, arg):
- pass
+ return self.headers.get(arg)
def json(self):
return self.content
+class FakeIterator(utils.ResultsIterator):
+ def _init_methods(self):
+ pass
+
+
class FakeClient(object):
user_agent = "Fake"
USER_AGENT = "Fake"
@@ -105,30 +113,53 @@ def __init__(self, *args, **kwargs):
self.identity = FakeIdentity()
+class FakeStorageClient(StorageClient):
+ def __init__(self, identity=None, *args, **kwargs):
+ if identity is None:
+ identity = FakeIdentity()
+ super(FakeStorageClient, self).__init__(identity, *args, **kwargs)
+
+ def create(self, name):
+ return FakeContainer(self._manager, {"name": name})
+
+
+class FakeContainerManager(ContainerManager):
+ def __init__(self, api=None, *args, **kwargs):
+ if api is None:
+ api = FakeStorageClient()
+ super(FakeContainerManager, self).__init__(api, *args, **kwargs)
+
+
class FakeContainer(Container):
- def _fetch_cdn_data(self):
- self._cdn_uri = None
- self._cdn_ttl = self.client.default_cdn_ttl
- self._cdn_ssl_uri = None
- self._cdn_streaming_uri = None
- self._cdn_ios_uri = None
- self._cdn_log_retention = False
+ def __init__(self, *args, **kwargs):
+ super(FakeContainer, self).__init__(*args, **kwargs)
+ self.object_manager = FakeStorageObjectManager(self.manager.api,
+ uri_base=self.name)
+ self.object_manager._container = self
+
+
+class FakeStorageObjectManager(StorageObjectManager):
+ def __init__(self, api=None, *args, **kwargs):
+ if api is None:
+ api = FakeStorageClient()
+ if "uri_base" not in kwargs:
+ kwargs["uri_base"] = utils.random_ascii()
+ super(FakeStorageObjectManager, self).__init__(api, *args, **kwargs)
class FakeStorageObject(StorageObject):
- def __init__(self, client, container, name=None, total_bytes=None,
- content_type=None, last_modified=None, etag=None, attdict=None):
+ def __init__(self, manager, name=None, total_bytes=None, content_type=None,
+ last_modified=None, etag=None, attdict=None):
"""
The object can either be initialized with individual params, or by
passing the dict that is returned by swiftclient.
"""
- self.client = client
- self.container = container
+ self.manager = manager
self.name = name
- self.total_bytes = total_bytes
+ self.bytes = total_bytes or 0
self.content_type = content_type
self.last_modified = last_modified
- self.etag = etag
+ self.hash = etag
if attdict:
self._read_attdict(attdict)
@@ -603,7 +634,16 @@ def __init__(self, identity=None, *args, **kwargs):
class FakeEndpoint(Endpoint):
- pass
+ def __init__(self, ep_dict=None, service=None, region=None, identity=None):
+ if ep_dict is None:
+ ep_dict = {}
+ if identity is None:
+ identity = FakeIdentity()
+ if service is None:
+ service = FakeIdentityService(identity)
+ if region is None:
+ region = "fake_region"
+ super(FakeEndpoint, self).__init__(ep_dict, service, region, identity)
class FakeRaxIdentity(RaxIdentity):
@@ -619,7 +659,7 @@ def __init__(self, *args, **kwargs):
self._default_region = random.choice(("DFW", "ORD"))
self.services = {"fake": FakeIdentityService(self)}
- def authenticate(self):
+ def authenticate(self, connect=False):
if ((self.username == self._good_username) and
(self.password == self._good_password)):
self._parse_response(self.fake_response())
@@ -804,6 +844,9 @@ def fake_response(self):
'region': 'DFW',
'tenantId': 'MossoCloudFS_abc'},
{u'publicURL': 'https://cdn1.clouddrive.com/v1/MossoCloudFS_abc',
+ 'region': 'FAKE',
+ 'tenantId': 'MossoCloudFS_abc'},
+ {u'publicURL': 'https://cdn1.clouddrive.com/v1/MossoCloudFS_abc',
'region': 'SYD',
'tenantId': 'MossoCloudFS_abc'},
{u'publicURL': 'https://cdn2.clouddrive.com/v1/MossoCloudFS_abc',
diff --git a/pyrax/http.py b/pyrax/http.py
index 245a688f..c5c75cc7 100644
--- a/pyrax/http.py
+++ b/pyrax/http.py
@@ -91,6 +91,8 @@ def http_log_req(method, uri, args, kwargs):
log.debug("\nREQ: %s\n" % " ".join(string_parts))
if "body" in kwargs:
pyrax._logger.debug("REQ BODY: %s\n" % (kwargs["body"]))
+ if "data" in kwargs:
+ pyrax._logger.debug("REQ DATA: %s\n" % (kwargs["data"]))
def http_log_resp(resp, body):
@@ -101,4 +103,6 @@ def http_log_resp(resp, body):
if not pyrax.get_http_debug():
return
log = logging.getLogger("pyrax")
- log.debug("RESP: %s %s\n", resp, body)
+ log.debug("RESP: %s\n%s", resp, resp.headers)
+ if body:
+ log.debug("RESP BODY: %s", body)
diff --git a/pyrax/identity/rax_identity.py b/pyrax/identity/rax_identity.py
index e26f5de4..741bca38 100644
--- a/pyrax/identity/rax_identity.py
+++ b/pyrax/identity/rax_identity.py
@@ -25,7 +25,8 @@ class RaxIdentity(BaseIdentity):
def _get_auth_endpoint(self):
- return self._auth_endpoint or AUTH_ENDPOINT
+ return (self._auth_endpoint or pyrax.get_setting("auth_endpoint")
+ or AUTH_ENDPOINT)
def _read_credential_file(self, cfg):
@@ -69,11 +70,14 @@ def set_credentials(self, username, password=None, region=None,
def authenticate(self, username=None, password=None, api_key=None,
- tenant_id=None):
+ tenant_id=None, connect=False):
"""
If the user's credentials include an API key, the default behavior will
work. But if they are using a password, the initial attempt will fail,
so try again, but this time using the standard password format.
+
+ The 'connect' parameter is retained for backwards compatibility. It no
+ longer has any effect.
"""
try:
super(RaxIdentity, self).authenticate(username=username,
diff --git a/pyrax/image.py b/pyrax/image.py
index 52ad5830..c5c61bb7 100644
--- a/pyrax/image.py
+++ b/pyrax/image.py
@@ -20,7 +20,7 @@
from functools import wraps
import pyrax
-from pyrax.cf_wrapper.storage_object import StorageObject
+from pyrax.object_storage import StorageObject
from pyrax.client import BaseClient
import pyrax.exceptions as exc
from pyrax.manager import BaseManager
diff --git a/pyrax/object_storage.py b/pyrax/object_storage.py
new file mode 100644
index 00000000..5e47d9bf
--- /dev/null
+++ b/pyrax/object_storage.py
@@ -0,0 +1,3270 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright 2014 Rackspace
+
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+from __future__ import print_function
+from __future__ import absolute_import
+import datetime
+from functools import wraps
+import hashlib
+import hmac
+import json
+import logging
+import math
+import mimetypes
+import os
+import re
+import six
+import threading
+import time
+import uuid
+
+import pyrax
+from pyrax.client import BaseClient
+import pyrax.exceptions as exc
+from pyrax.manager import BaseManager
+from pyrax.resource import BaseResource
+import pyrax.utils as utils
+
+ACCOUNT_META_PREFIX = "X-Account-Meta-"
+CONTAINER_META_PREFIX = "X-Container-Meta-"
+CONTAINER_HEAD_PREFIX = "X-Container-"
+OBJECT_META_PREFIX = "X-Object-Meta-"
+
+# Maximum size of a stored object: 5GB - 1
+MAX_FILE_SIZE = 5368709119
+# Default size for chunked uploads, in bytes
+DEFAULT_CHUNKSIZE = 65536
+# The default for CDN when TTL is not specified.
+DEFAULT_CDN_TTL = 86400
+# When comparing files dates, represents a date older than anything.
+EARLY_DATE_STR = "1900-01-01T00:00:00"
+
+# Used to indicate values that are lazy-loaded
+class Fault_cls(object):
+ def __nonzero__(self):
+ return False
+
+FAULT = Fault_cls()
+
+
+def assure_container(fnc):
+ """
+ Assures that whether a Container or a name of a container is passed, a
+ Container object is available.
+ """
+ @wraps(fnc)
+ def _wrapped(self, container, *args, **kwargs):
+ if not isinstance(container, Container):
+ # Must be the name
+ container = self.get(container)
+ return fnc(self, container, *args, **kwargs)
+ return _wrapped
+
+
+def _massage_metakeys(dct, prfx):
+ """
+ Returns a copy of the supplied dictionary, prefixing any keys that do
+ not begin with the specified prefix accordingly.
+ """
+ lowprefix = prfx.lower()
+ ret = {}
+ for k, v in list(dct.items()):
+ if not k.lower().startswith(lowprefix):
+ k = "%s%s" % (prfx, k)
+ ret[k] = v
+ return ret
+
+
+def _validate_file_or_path(file_or_path, obj_name):
+ if isinstance(file_or_path, six.string_types):
+ # Make sure it exists
+ if not os.path.exists(file_or_path):
+ raise exc.FileNotFound("The file '%s' does not exist." %
+ file_or_path)
+ fname = os.path.basename(file_or_path)
+ else:
+ try:
+ fname = os.path.basename(file_or_path.name)
+ except AttributeError:
+ fname = None
+ return obj_name or fname
+
+
+def _valid_upload_key(fnc):
+ @wraps(fnc)
+ def wrapped(self, upload_key, *args, **kwargs):
+ try:
+ self.folder_upload_status[upload_key]
+ except KeyError:
+ raise exc.InvalidUploadID("There is no folder upload with the "
+ "key '%s'." % upload_key)
+ return fnc(self, upload_key, *args, **kwargs)
+ return wrapped
+
+
+def _handle_container_not_found(fnc):
+ @wraps(fnc)
+ def wrapped(self, container, *args, **kwargs):
+ try:
+ return fnc(self, container, *args, **kwargs)
+ except exc.NotFound as e:
+ name = utils.get_name(container)
+ e.message = "Container '%s' doesn't exist" % name
+ raise exc.NoSuchContainer(e)
+ return wrapped
+
+
+def _handle_object_not_found(fnc):
+ @wraps(fnc)
+ def wrapped(self, obj, *args, **kwargs):
+ try:
+ return fnc(self, obj, *args, **kwargs)
+ except exc.NotFound as e:
+ name = utils.get_name(obj)
+ e.message = "Object '%s' doesn't exist" % name
+ raise exc.NoSuchObject(e)
+ return wrapped
+
+
+def get_file_size(fileobj):
+ """
+ Returns the size of a file-like object.
+ """
+ currpos = fileobj.tell()
+ fileobj.seek(0, 2)
+ total_size = fileobj.tell()
+ fileobj.seek(currpos)
+ return total_size
+
+
+
+class Container(BaseResource):
+ def __init__(self, *args, **kwargs):
+ super(Container, self).__init__(*args, **kwargs)
+ self._cdn_enabled = FAULT
+ self._cdn_uri = FAULT
+ self._cdn_ttl = FAULT
+ self._cdn_ssl_uri = FAULT
+ self._cdn_streaming_uri = FAULT
+ self._cdn_ios_uri = FAULT
+ self._cdn_log_retention = FAULT
+ self.object_manager = StorageObjectManager(self.manager.api,
+ uri_base=self.name, resource_class=StorageObject)
+ self._non_display = ["object_manager"]
+ self._backwards_aliases()
+
+
+ def _backwards_aliases(self):
+ self.get_objects = self.list
+ self.get_object_names = self.list_object_names
+ # Prevent these from displaying
+ self._non_display.extend(["get_objects", "get_object",
+ "get_object_names"])
+
+
+ def __repr__(self):
+ return "" % self.name
+
+
+ @property
+ def id(self):
+ """
+ Since a container's name serves as its ID, this will allow both to be
+ used.
+ """
+ return self.name
+
+
+ def _set_cdn_defaults(self):
+ """Sets all the CDN-related attributes to default values."""
+ if self._cdn_enabled is FAULT:
+ self._cdn_enabled = False
+ self._cdn_uri = None
+ self._cdn_ttl = DEFAULT_CDN_TTL
+ self._cdn_ssl_uri = None
+ self._cdn_streaming_uri = None
+ self._cdn_ios_uri = None
+ self._cdn_log_retention = False
+
+
+ def _fetch_cdn_data(self):
+ """Fetches the container's CDN data from the CDN service"""
+ if self._cdn_enabled is FAULT:
+ headers = self.manager.fetch_cdn_data(self)
+ else:
+ headers = {}
+ # Set defaults in case not all headers are present.
+ self._set_cdn_defaults()
+ if not headers:
+ # Not CDN enabled; return
+ return
+ else:
+ self._cdn_enabled = True
+ for key, value in headers.items():
+ low_key = key.lower()
+ if low_key == "x-cdn-uri":
+ self._cdn_uri = value
+ elif low_key == "x-ttl":
+ self._cdn_ttl = int(value)
+ elif low_key == "x-cdn-ssl-uri":
+ self._cdn_ssl_uri = value
+ elif low_key == "x-cdn-streaming-uri":
+ self._cdn_streaming_uri = value
+ elif low_key == "x-cdn-ios-uri":
+ self._cdn_ios_uri = value
+ elif low_key == "x-log-retention":
+ self._cdn_log_retention = (value == "True")
+
+
+ def get_metadata(self, prefix=None):
+ """
+ Returns a dictionary containing the metadata for this container.
+ """
+ return self.manager.get_metadata(self, prefix=prefix)
+
+
+ def set_metadata(self, metadata, clear=False, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified container metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the container's metadata.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+
+ By default, the standard container metadata prefix
+ ('X-Container-Meta-') is prepended to the header name if it isn't
+ present. For non-standard headers, you must include a non-None prefix,
+ such as an empty string.
+ """
+ return self.manager.set_metadata(self, metadata, clear=clear,
+ prefix=prefix)
+
+
+ def remove_metadata_key(self, key, prefix=None):
+ """
+ Removes the specified key from the container's metadata. If the key
+ does not exist in the metadata, nothing is done.
+ """
+ return self.manager.remove_metadata_key(self, key, prefix=prefix)
+
+
+ def set_web_index_page(self, page):
+ """
+ Sets the header indicating the index page in this container when
+ creating a static website.
+
+ Note: the container must be CDN-enabled for this to have any effect.
+ """
+ return self.manager.set_web_index_page(self, page)
+
+
+ def set_web_error_page(self, page):
+ """
+ Sets the header indicating the error page in this container when
+ creating a static website.
+
+ Note: the container must be CDN-enabled for this to have any effect.
+ """
+ return self.manager.set_web_error_page(self, page)
+
+
+ def make_public(self, ttl=None):
+ """
+ Enables CDN access for this container, and optionally sets the TTL.
+ """
+ return self.manager.make_public(self, ttl=ttl)
+
+
+ def make_private(self):
+ """
+ Disables CDN access to this container. It may still appear public until
+ the TTL expires.
+ """
+ return self.manager.make_private(self)
+
+
+ def purge_cdn_object(self, obj, email_addresses=None):
+ """
+ Removes a CDN-enabled object from public access before the TTL expires.
+ Please note that there is a limit (at this time) of 25 such requests;
+ if you need to purge more than that, you must contact support.
+
+ If one or more email_addresses are included, an email confirming the
+ purge is sent to each address.
+ """
+ return self.object_manager.purge(obj, email_addresses=email_addresses)
+
+
+ def get_object(self, item):
+ """
+ Returns a StorageObject matching the specified item. If no such object
+ exists, a NotFound exception is raised. If 'item' is not a string, that
+ item is returned unchanged.
+ """
+ if isinstance(item, six.string_types):
+ item = self.object_manager.get(item)
+ return item
+
+
+ def list(self, marker=None, limit=None, prefix=None, delimiter=None,
+ end_marker=None, full_listing=False, return_raw=False):
+ """
+ List the objects in this container, using the parameters to control the
+ number and content of objects. Note that this is limited by the
+ absolute request limits of Swift (currently 10,000 objects). If you
+ need to list all objects in the container, use the `list_all()` method
+ instead.
+ """
+ if full_listing:
+ return self.list_all(prefix=prefix)
+ else:
+ return self.object_manager.list(marker=marker, limit=limit,
+ prefix=prefix, delimiter=delimiter, end_marker=end_marker,
+ return_raw=return_raw)
+
+
+ def list_all(self, prefix=None):
+ """
+ List all the objects in this container, optionally filtered by an
+ initial prefix. Returns an iterator that will yield all the objects in
+ the container, even if the number exceeds the absolute limits of Swift.
+ """
+ return self.manager.object_listing_iterator(self, prefix=prefix)
+
+
+ def list_object_names(self, marker=None, limit=None, prefix=None,
+ delimiter=None, end_marker=None, full_listing=False):
+ """
+ Returns a list of the names of all the objects in this container. The
+ same pagination parameters apply as in self.list().
+ """
+ if full_listing:
+ objects = self.list_all(prefix=prefix)
+ else:
+ objects = self.list(marker=marker, limit=limit, prefix=prefix,
+ delimiter=delimiter, end_marker=end_marker)
+ return [obj.name for obj in objects]
+
+
+ def find(self, **kwargs):
+ """
+ Finds a single object with attributes matching ``**kwargs``.
+
+ This isn't very efficient: it loads the entire list then filters on
+ the Python side.
+ """
+ return self.object_manager.find(**kwargs)
+
+
+ def findall(self, **kwargs):
+ """
+ Finds all objects with attributes matching ``**kwargs``.
+
+ This isn't very efficient: it loads the entire list then filters on
+ the Python side.
+ """
+ return self.object_manager.findall(**kwargs)
+
+
+ def create(self, file_or_path=None, data=None, obj_name=None,
+ content_type=None, etag=None, content_encoding=None,
+ content_length=None, ttl=None, chunked=False, metadata=None,
+ chunk_size=None, headers=None, return_none=False):
+ """
+ Creates or replaces a storage object in this container.
+
+ The content of the object can either be a stream of bytes (`data`), or
+ a file on disk (`file_or_path`). The disk file can be either an open
+ file-like object, or an absolute path to the file on disk.
+
+ When creating object from a data stream, you must specify the name of
+ the object to be created in the container via the `obj_name` parameter.
+ When working with a file, though, if no `obj_name` value is specified,
+ the file`s name will be used.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored. If no `content_type` is specified, the object storage system
+ will make an intelligent guess based on the content of the object.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+
+ If you wish to store a stream of data (i.e., where you don't know the
+ total size in advance), set the `chunked` parameter to True, and omit
+ the `content_length` and `etag` parameters. This allows the data to be
+ streamed to the object in the container without having to be written to
+ disk first.
+ """
+ return self.object_manager.create(file_or_path=file_or_path,
+ data=data, obj_name=obj_name, content_type=content_type,
+ etag=etag, content_encoding=content_encoding,
+ content_length=content_length, ttl=ttl, chunked=chunked,
+ metadata=metadata, chunk_size=chunk_size, headers=headers,
+ return_none=return_none)
+
+
+ def store_object(self, obj_name, data, content_type=None, etag=None,
+ content_encoding=None, ttl=None, return_none=False,
+ headers=None, extra_info=None):
+ """
+ Creates a new object in this container, and populates it with the given
+ data. A StorageObject reference to the uploaded file will be returned,
+ unless 'return_none' is set to True.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.create(obj_name=obj_name, data=data,
+ content_type=content_type, etag=etag,
+ content_encoding=content_encoding, ttl=ttl,
+ return_none=return_none, headers=headers)
+
+
+ def upload_file(self, file_or_path, obj_name=None, content_type=None,
+ etag=None, return_none=False, content_encoding=None, ttl=None,
+ content_length=None, headers=None):
+ """
+ Uploads the specified file to this container. If no name is supplied,
+ the file's name will be used. Either a file path or an open file-like
+ object may be supplied. A StorageObject reference to the uploaded file
+ will be returned, unless 'return_none' is set to True.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.create(file_or_path=file_or_path, obj_name=obj_name,
+ content_type=content_type, etag=etag,
+ content_encoding=content_encoding, headers=headers,
+ content_length=content_length, ttl=ttl,
+ return_none=return_none)
+
+
+ def fetch(self, obj, include_meta=False, chunk_size=None, size=None,
+ extra_info=None):
+ """
+ Fetches the object from storage.
+
+ If 'include_meta' is False, only the bytes representing the
+ stored object are returned.
+
+ Note: if 'chunk_size' is defined, you must fully read the object's
+ contents before making another request.
+
+ If 'size' is specified, only the first 'size' bytes of the object will
+ be returned. If the object if smaller than 'size', the entire object is
+ returned.
+
+ When 'include_meta' is True, what is returned from this method is a
+ 2-tuple:
+ Element 0: a dictionary containing metadata about the file.
+ Element 1: a stream of bytes representing the object's contents.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.object_manager.fetch(obj, include_meta=include_meta,
+ chunk_size=chunk_size, size=size)
+
+
+ def fetch_object(self, obj_name, include_meta=False, chunk_size=None):
+ """
+ Alias for self.fetch(); included for backwards compatibility
+ """
+ return self.fetch(obj=obj_name, include_meta=include_meta,
+ chunk_size=chunk_size)
+
+
+ def fetch_partial(self, obj, size):
+ """
+ Returns the first 'size' bytes of an object. If the object is smaller
+ than the specified 'size' value, the entire object is returned.
+ """
+ return self.object_manager.fetch_partial(obj, size)
+
+
+ def download(self, obj, directory, structure=True):
+ """
+ Fetches the object from storage, and writes it to the specified
+ directory. The directory must exist before calling this method.
+
+ If the object name represents a nested folder structure, such as
+ "foo/bar/baz.txt", that folder structure will be created in the target
+ directory by default. If you do not want the nested folders to be
+ created, pass `structure=False` in the parameters.
+ """
+ return self.object_manager.download(obj, directory, structure=structure)
+
+
+ def download_object(self, obj_name, directory, structure=True):
+ """
+ Alias for self.download(); included for backwards compatibility
+ """
+ return self.download(obj=obj_name, directory=directory,
+ structure=structure)
+
+
+ def delete(self, del_objects=False):
+ """
+ Deletes this Container. If the container contains objects, the
+ command will fail unless 'del_objects' is passed as True. In that
+ case, each object will be deleted first, and then the container.
+ """
+ return self.manager.delete(self, del_objects=del_objects)
+
+
+ def delete_object(self, obj):
+ """
+ Deletes the object from this container.
+
+ The 'obj' parameter can either be the name of the object, or a
+ StorageObject representing the object to be deleted.
+ """
+ return self.object_manager.delete(obj)
+
+
+ def delete_object_in_seconds(self, obj, seconds, extra_info=None):
+ """
+ Sets the object in this container to be deleted after the specified
+ number of seconds.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.manager.delete_object_in_seconds(self, obj, seconds)
+
+
+ def delete_all_objects(self, async=False):
+ """
+ Deletes all objects from this container.
+
+ By default the call will block until all objects have been deleted. By
+ passing True for the 'async' parameter, this method will not block, and
+ instead return an object that can be used to follow the progress of the
+ deletion. When deletion is complete the bulk deletion object's
+ 'results' attribute will be populated with the information returned
+ from the API call. In synchronous mode this is the value that is
+ returned when the call completes. It is a dictionary with the following
+ keys:
+
+ deleted - the number of objects deleted
+ not_found - the number of objects not found
+ status - the HTTP return status code. '200 OK' indicates success
+ errors - a list of any errors returned by the bulk delete call
+ """
+ nms = self.list_object_names(full_listing=True)
+ return self.object_manager.delete_all_objects(nms, async=async)
+
+
+ def copy_object(self, obj, new_container, new_obj_name=None,
+ content_type=None):
+ """
+ Copies the object to the new container, optionally giving it a new name.
+ If you copy to the same container, you must supply a different name.
+ """
+ return self.manager.copy_object(self, obj, new_container,
+ new_obj_name=new_obj_name, content_type=content_type)
+
+
+ def move_object(self, obj, new_container, new_obj_name=None,
+ new_reference=False, content_type=None, extra_info=None):
+ """
+ Works just like copy_object, except that the source object is deleted
+ after a successful copy.
+
+ You can optionally change the content_type of the object by supplying
+ that in the 'content_type' parameter.
+
+ NOTE: any references to the original object will no longer be valid;
+ you will have to get a reference to the new object by passing True for
+ the 'new_reference' parameter. When this is True, a reference to the
+ newly moved object is returned. Otherwise, the etag for the moved
+ object is returned.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.manager.move_object(self, obj, new_container,
+ new_obj_name=new_obj_name, new_reference=new_reference,
+ content_type=content_type)
+
+
+ def change_object_content_type(self, obj, new_ctype, guess=False):
+ """
+ Copies object to itself, but applies a new content-type. The guess
+ feature requires this container to be CDN-enabled. If not, then the
+ content-type must be supplied. If using guess with a CDN-enabled
+ container, new_ctype can be set to None. Failure during the put will
+ result in an exception.
+ """
+ return self.manager.change_object_content_type(self, obj, new_ctype,
+ guess=guess)
+
+
+ def get_temp_url(self, obj, seconds, method="GET", key=None, cached=True):
+ """
+ Given a storage object in this container, returns a URL that can be
+ used to access that object. The URL will expire after `seconds`
+ seconds.
+
+ The only methods supported are GET and PUT. Anything else will raise an
+ `InvalidTemporaryURLMethod` exception.
+
+ If you have your Temporary URL key, you can pass it in directly and
+ potentially save an API call to retrieve it. If you don't pass in the
+ key, and don't wish to use any cached value, pass `cached=False`.
+ """
+ return self.manager.get_temp_url(self, obj, seconds, method=method,
+ key=key, cached=cached)
+
+
+ def get_object_metadata(self, obj):
+ """
+ Returns the metadata for the specified object as a dict.
+ """
+ return self.object_manager.get_metadata(obj)
+
+
+ def set_object_metadata(self, obj, metadata, clear=False, extra_info=None,
+ prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified object metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the object's metadata.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+
+ By default, the standard object metadata prefix ('X-Object-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ return self.object_manager.set_metadata(obj, metadata, clear=clear,
+ prefix=prefix)
+
+
+ def list_subdirs(self, marker=None, limit=None, prefix=None, delimiter=None,
+ full_listing=False):
+ """
+ Return a list of the namesrepresenting the pseudo-subdirectories in
+ this container. You can use the marker and limit params to handle
+ pagination, and the prefix param to filter the objects returned. The
+ delimiter param is there for backwards compatibility only, as the call
+ requires the delimiter to be '/'.
+ """
+ return self.manager.list_subdirs(self, marker=marker, limit=limit,
+ prefix=prefix, delimiter=delimiter, full_listing=full_listing)
+
+
+ def remove_from_cache(self, obj):
+ """
+ Not used anymore. Included for backwards compatibility.
+ """
+ pass
+
+
+ # BEGIN - CDN property definitions ##
+ def _get_cdn_log_retention(self):
+ if self._cdn_log_retention is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_log_retention
+
+ def _set_cdn_log_retention(self, val):
+ self.manager.set_cdn_log_retention(self, val)
+ self._cdn_log_retention = val
+
+
+ def _get_cdn_enabled(self):
+ if self._cdn_enabled is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_enabled
+
+ def _set_cdn_enabled(self, val):
+ self._cdn_enabled = val
+
+
+ def _get_cdn_uri(self):
+ if self._cdn_uri is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_uri
+
+ def _set_cdn_uri(self, val):
+ self._cdn_uri = val
+
+
+ def _get_cdn_ttl(self):
+ if self._cdn_ttl is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_ttl
+
+ def _set_cdn_ttl(self, val):
+ self._cdn_ttl = val
+
+
+ def _get_cdn_ssl_uri(self):
+ if self._cdn_ssl_uri is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_ssl_uri
+
+ def _set_cdn_ssl_uri(self, val):
+ self._cdn_ssl_uri = val
+
+
+ def _get_cdn_streaming_uri(self):
+ if self._cdn_streaming_uri is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_streaming_uri
+
+ def _set_cdn_streaming_uri(self, val):
+ self._cdn_streaming_uri = val
+
+
+ def _get_cdn_ios_uri(self):
+ if self._cdn_ios_uri is FAULT:
+ self._fetch_cdn_data()
+ return self._cdn_ios_uri
+
+ def _set_cdn_ios_uri(self, val):
+ self._cdn_ios_uri = val
+
+
+ cdn_enabled = property(_get_cdn_enabled, _set_cdn_enabled)
+ cdn_log_retention = property(_get_cdn_log_retention, _set_cdn_log_retention)
+ cdn_uri = property(_get_cdn_uri, _set_cdn_uri)
+ cdn_ttl = property(_get_cdn_ttl, _set_cdn_ttl)
+ cdn_ssl_uri = property(_get_cdn_ssl_uri, _set_cdn_ssl_uri)
+ cdn_streaming_uri = property(_get_cdn_streaming_uri, _set_cdn_streaming_uri)
+ cdn_ios_uri = property(_get_cdn_ios_uri, _set_cdn_ios_uri)
+ # END - CDN property definitions ##
+
+
+
+class ContainerManager(BaseManager):
+ def _list(self, uri, obj_class=None, body=None, return_raw=False):
+ """
+ Swift doesn't return listings in the same format as the rest of
+ OpenStack, so this method has to be overriden.
+ """
+ resp, resp_body = self.api.method_get(uri)
+ return [Container(self, res, loaded=False)
+ for res in resp_body if res]
+
+
+ @_handle_container_not_found
+ def get(self, container):
+ """
+ Returns a Container matching the specified container name. If no such
+ container exists, a NoSuchContainer exception is raised.
+ """
+ name = utils.get_name(container)
+ uri = "/%s" % name
+ resp, resp_body = self.api.method_head(uri)
+ hdrs = resp.headers
+ data = {"total_bytes": int(hdrs.get("x-container-bytes-used", "0")),
+ "object_count": int(hdrs.get("x-container-object-count", "0")),
+ "name": name}
+ return Container(self, data, loaded=False)
+
+
+ def create(self, name, metadata=None, prefix=None, *args, **kwargs):
+ """
+ Creates a new container, and returns a Container object that represents
+ that contianer. If a container by the same name already exists, no
+ exception is raised; instead, a reference to that existing container is
+ returned.
+ """
+ uri = "/%s" % name
+ headers = {}
+ if prefix is None:
+ prefix = CONTAINER_META_PREFIX
+ if metadata:
+ metadata = _massage_metakeys(metadata, prefix)
+ headers = metadata
+ resp, resp_body = self.api.method_put(uri, headers=headers)
+ if resp.status_code in (201, 202):
+ hresp, hresp_body = self.api.method_head(uri)
+ num_obj = int(hresp.headers.get("x-container-object-count", "0"))
+ num_bytes = int(hresp.headers.get("x-container-bytes-used", "0"))
+ cont_info = {"name": name, "object_count": num_obj,
+ "total_bytes": num_bytes}
+ return Container(self, cont_info)
+ elif resp.status_code == 400:
+ raise exc.ClientException("Container creation failed: %s" %
+ resp_body)
+
+
+ @_handle_container_not_found
+ def delete(self, container, del_objects=False):
+ """
+ Deletes the specified container. If the container contains objects, the
+ command will fail unless 'del_objects' is passed as True. In that case,
+ each object will be deleted first, and then the container.
+ """
+ if del_objects:
+ nms = self.list_object_names(container)
+ self.api.bulk_delete(container, nms, async=False)
+ uri = "/%s" % utils.get_name(container)
+ resp, resp_body = self.api.method_delete(uri)
+
+
+ def _create_body(self, name, *args, **kwargs):
+ """
+ Container creation requires no body.
+ """
+ return None
+
+
+ @_handle_container_not_found
+ def fetch_cdn_data(self, container):
+ """
+ Returns a dict containing the CDN information for the specified
+ container. If the container is not CDN-enabled, returns an empty dict.
+ """
+ name = utils.get_name(container)
+ uri = "/%s" % name
+ try:
+ resp, resp_body = self.api.cdn_request(uri, "HEAD")
+ except exc.NotCDNEnabled:
+ return {}
+ return resp.headers
+
+
+ def get_account_headers(self):
+ """
+ Return the headers for the account. This includes all the headers, not
+ just the account-specific headers. The calling program is responsible
+ for only using the ones that it needs.
+ """
+ resp, resp_body = self.api.method_head("/")
+ return resp.headers
+
+
+ @_handle_container_not_found
+ def get_headers(self, container):
+ """
+ Return the headers for the specified container.
+ """
+ uri = "/%s" % utils.get_name(container)
+ resp, resp_body = self.api.method_head(uri)
+ return resp.headers
+
+
+ def get_account_metadata(self, prefix=None):
+ """
+ Returns a dictionary containing metadata about the account.
+ """
+ headers = self.get_account_headers()
+ if prefix is None:
+ prefix = ACCOUNT_META_PREFIX
+ low_prefix = prefix.lower()
+ ret = {}
+ for hkey, hval in list(headers.items()):
+ lowkey = hkey.lower()
+ if lowkey.startswith(low_prefix):
+ cleaned = hkey.replace(low_prefix, "").replace("-", "_")
+ ret[cleaned] = hval
+ return ret
+
+
+ def set_account_metadata(self, metadata, clear=False, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ account metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the account's metadata.
+
+ By default, the standard account metadata prefix ('X-Account-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = ACCOUNT_META_PREFIX
+ massaged = _massage_metakeys(metadata, prefix)
+ new_meta = {}
+ if clear:
+ curr_meta = self.get_account_metadata(prefix=prefix)
+ for ckey in curr_meta:
+ new_meta[ckey] = ""
+ new_meta = _massage_metakeys(new_meta, prefix)
+ utils.case_insensitive_update(new_meta, massaged)
+ uri = "/"
+ resp, resp_body = self.api.method_post(uri, headers=new_meta)
+ return 200 <= resp.status_code <= 299
+
+
+ def delete_account_metadata(self, prefix=None):
+ """
+ Removes all metadata matching the specified prefix from the account.
+
+ By default, the standard account metadata prefix ('X-Account-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = ACCOUNT_META_PREFIX
+ curr_meta = self.get_account_metadata(prefix=prefix)
+ for ckey in curr_meta:
+ curr_meta[ckey] = ""
+ new_meta = _massage_metakeys(curr_meta, prefix)
+ uri = "/"
+ resp, resp_body = self.api.method_post(uri, headers=new_meta)
+ return 200 <= resp.status_code <= 299
+
+
+ def get_metadata(self, container, prefix=None):
+ """
+ Returns a dictionary containing the metadata for the container.
+ """
+ headers = self.get_headers(container)
+ if prefix is None:
+ prefix = CONTAINER_META_PREFIX
+ low_prefix = prefix.lower()
+ ret = {}
+ for hkey, hval in list(headers.items()):
+ if hkey.lower().startswith(low_prefix):
+ cleaned = hkey.replace(low_prefix, "").replace("-", "_")
+ ret[cleaned] = hval
+ return ret
+
+
+ @_handle_container_not_found
+ def set_metadata(self, container, metadata, clear=False, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified container metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the container's metadata.
+
+ By default, the standard container metadata prefix
+ ('X-Container-Meta-') is prepended to the header name if it isn't
+ present. For non-standard headers, you must include a non-None prefix,
+ such as an empty string.
+ """
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = CONTAINER_META_PREFIX
+ massaged = _massage_metakeys(metadata, prefix)
+ new_meta = {}
+ if clear:
+ curr_meta = self.api.get_container_metadata(container,
+ prefix=prefix)
+ for ckey in curr_meta:
+ new_meta[ckey] = ""
+ utils.case_insensitive_update(new_meta, massaged)
+ name = utils.get_name(container)
+ uri = "/%s" % name
+ resp, resp_body = self.api.method_post(uri, headers=new_meta)
+ return 200 <= resp.status_code <= 299
+
+
+ def remove_metadata_key(self, container, key):
+ """
+ Removes the specified key from the container's metadata. If the key
+ does not exist in the metadata, nothing is done.
+ """
+ meta_dict = {key: ""}
+ return self.set_metadata(container, meta_dict)
+
+
+ @_handle_container_not_found
+ def delete_metadata(self, container, prefix=None):
+ """
+ Removes all of the container's metadata.
+
+ By default, all metadata beginning with the standard container metadata
+ prefix ('X-Container-Meta-') is removed. If you wish to remove all
+ metadata beginning with a different prefix, you must specify that
+ prefix.
+ """
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = CONTAINER_META_PREFIX
+ new_meta = {}
+ curr_meta = self.get_metadata(container, prefix=prefix)
+ for ckey in curr_meta:
+ new_meta[ckey] = ""
+ uri = "/%s" % utils.get_name(container)
+ resp, resp_body = self.api.method_post(uri, headers=new_meta)
+ return 200 <= resp.status_code <= 299
+
+
+ @_handle_container_not_found
+ def get_cdn_metadata(self, container):
+ """
+ Returns a dictionary containing the CDN metadata for the container. If
+ the container does not exist, a NotFound exception is raised. If the
+ container exists, but is not CDN-enabled, a NotCDNEnabled exception is
+ raised.
+ """
+ uri = "%s/%s" % (self.uri_base, utils.get_name(container))
+ resp, resp_body = self.api.cdn_request(uri, "HEAD")
+ ret = dict(resp.headers)
+ # Remove non-CDN headers
+ ret.pop("content-length", None)
+ ret.pop("content-type", None)
+ ret.pop("date", None)
+ return ret
+
+
+ @_handle_container_not_found
+ def set_cdn_metadata(self, container, metadata):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates
+ the specified container metadata with them.
+
+ NOTE: arbitrary metadata headers are not allowed. The only metadata
+ you can update are: X-Log-Retention, X-CDN-enabled, and X-TTL.
+ """
+ allowed = ("x-log-retention", "x-cdn-enabled", "x-ttl")
+ hdrs = {}
+ bad = []
+ for mkey, mval in six.iteritems(metadata):
+ if mkey.lower() not in allowed:
+ bad.append(mkey)
+ continue
+ hdrs[mkey] = str(mval)
+ if bad:
+ raise exc.InvalidCDNMetadata("The only CDN metadata you can "
+ "update are: X-Log-Retention, X-CDN-enabled, and X-TTL. "
+ "Received the following illegal item(s): %s" %
+ ", ".join(bad))
+ uri = "%s/%s" % (self.uri_base, utils.get_name(container))
+ resp, resp_body = self.api.cdn_request(uri, "POST", headers=hdrs)
+ return resp
+
+
+ def get_temp_url(self, container, obj, seconds, method="GET", key=None,
+ cached=True):
+ """
+ Given a storage object in a container, returns a URL that can be used
+ to access that object. The URL will expire after `seconds` seconds.
+
+ The only methods supported are GET and PUT. Anything else will raise
+ an `InvalidTemporaryURLMethod` exception.
+
+ If you have your Temporary URL key, you can pass it in directly and
+ potentially save an API call to retrieve it. If you don't pass in the
+ key, and don't wish to use any cached value, pass `cached=False`.
+ """
+ if not key:
+ key = self.api.get_temp_url_key(cached=cached)
+ if not key:
+ raise exc.MissingTemporaryURLKey("You must set the key for "
+ "Temporary URLs before you can generate them. This is "
+ "done via the `set_temp_url_key()` method.")
+ cname = utils.get_name(container)
+ oname = utils.get_name(obj)
+ mod_method = method.upper().strip()
+ if mod_method not in ("GET", "PUT"):
+ raise exc.InvalidTemporaryURLMethod("Method must be either 'GET' "
+ "or 'PUT'; received '%s'." % method)
+ mgt_url = self.api.management_url
+ mtch = re.search(r"/v\d/", mgt_url)
+ start = mtch.start()
+ base_url = mgt_url[:start]
+ path_parts = (mgt_url[start:], cname, oname)
+ cleaned = (part.strip("/\\") for part in path_parts)
+ pth = "/%s" % "/".join(cleaned)
+ if isinstance(pth, six.string_types):
+ pth = pth.encode(pyrax.get_encoding())
+ expires = int(time.time() + int(seconds))
+ hmac_body = "%s\n%s\n%s" % (mod_method, expires, pth)
+ try:
+ sig = hmac.new(key, hmac_body, hashlib.sha1).hexdigest()
+ except TypeError as e:
+ raise exc.UnicodePathError("Due to a bug in Python, the TempURL "
+ "function only works with ASCII object paths.")
+ temp_url = "%s%s?temp_url_sig=%s&temp_url_expires=%s" % (base_url, pth,
+ sig, expires)
+ return temp_url
+
+
+ def list_containers_info(self, limit=None, marker=None):
+ """Returns a list of info on Containers.
+
+ For each container, a dict containing the following keys is returned:
+ \code
+ name - the name of the container
+ count - the number of objects in the container
+ bytes - the total bytes in the container
+ """
+ uri = ""
+ qs = utils.dict_to_qs({"limit": limit, "marker": marker})
+ if qs:
+ uri += "%s?%s" % (uri, qs)
+ resp, resp_body = self.api.method_get(uri)
+ return resp_body
+
+
+ def list_public_containers(self):
+ """
+ Returns a list of the names of all CDN-enabled containers.
+ """
+ resp, resp_body = self.api.cdn_request("", "GET")
+ return [cont["name"] for cont in resp_body]
+
+
+ def make_public(self, container, ttl=None):
+ """
+ Enables CDN access for the specified container, and optionally sets the
+ TTL for the container.
+ """
+ return self._set_cdn_access(container, public=True, ttl=ttl)
+
+
+ def make_private(self, container):
+ """
+ Disables CDN access to a container. It may still appear public until
+ its TTL expires.
+ """
+ return self._set_cdn_access(container, public=False)
+
+
+ @_handle_container_not_found
+ def _set_cdn_access(self, container, public, ttl=None):
+ """
+ Enables or disables CDN access for the specified container, and
+ optionally sets the TTL for the container when enabling access.
+ """
+ headers = {"X-Cdn-Enabled": "%s" % public}
+ if public and ttl:
+ headers["X-Ttl"] = ttl
+ self.api.cdn_request("/%s" % utils.get_name(container), method="PUT",
+ headers=headers)
+
+
+ @_handle_container_not_found
+ def get_cdn_log_retention(self, container):
+ """
+ Returns the status of the setting for CDN log retention for the
+ specified container.
+ """
+ resp, resp_body = self.api.cdn_request("/%s" %
+ utils.get_name(container), method="HEAD")
+ return resp.headers.get("x-log-retention").lower() == "true"
+
+
+ @_handle_container_not_found
+ def set_cdn_log_retention(self, container, enabled):
+ """
+ Enables or disables whether CDN access logs for the specified container
+ are collected and stored on Cloud Files.
+ """
+ headers = {"X-Log-Retention": "%s" % enabled}
+ self.api.cdn_request("/%s" % utils.get_name(container), method="PUT",
+ headers=headers)
+
+
+ @_handle_container_not_found
+ def get_container_streaming_uri(self, container):
+ """
+ Returns the URI for streaming content, or None if CDN is not enabled.
+ """
+ resp, resp_body = self.api.cdn_request("/%s" %
+ utils.get_name(container), method="HEAD")
+ return resp.headers.get("x-cdn-streaming-uri")
+
+
+ @_handle_container_not_found
+ def get_container_ios_uri(self, container):
+ """
+ Returns the iOS URI, or None if CDN is not enabled.
+ """
+ resp, resp_body = self.api.cdn_request("/%s" %
+ utils.get_name(container), method="HEAD")
+ return resp.headers.get("x-cdn-ios-uri")
+
+
+ @_handle_container_not_found
+ def set_web_index_page(self, container, page):
+ """
+ Sets the header indicating the index page in a container
+ when creating a static website.
+
+ Note: the container must be CDN-enabled for this to have
+ any effect.
+ """
+ headers = {"X-Container-Meta-Web-Index": "%s" % page}
+ self.api.cdn_request("/%s" % utils.get_name(container), method="POST",
+ headers=headers)
+
+
+ @_handle_container_not_found
+ def set_web_error_page(self, container, page):
+ """
+ Sets the header indicating the error page in a container
+ when creating a static website.
+
+ Note: the container must be CDN-enabled for this to have
+ any effect.
+ """
+ headers = {"X-Container-Meta-Web-Error": "%s" % page}
+ self.api.cdn_request("/%s" % utils.get_name(container), method="POST",
+ headers=headers)
+
+
+ @assure_container
+ def purge_cdn_object(self, container, obj, email_addresses=None):
+ """
+ Removes a CDN-enabled object from public access before the TTL expires.
+ Please note that there is a limit (at this time) of 25 such requests;
+ if you need to purge more than that, you must contact support.
+
+ If one or more email_addresses are included, an email confirming the
+ purge is sent to each address.
+ """
+ return container.purge_cdn_object(obj, email_addresses=email_addresses)
+
+
+ @assure_container
+ def list_objects(self, container, limit=None, marker=None, prefix=None,
+ delimiter=None, end_marker=None, full_listing=False):
+ """
+ Return a list of StorageObjects representing the objects in this
+ container. You can use the marker, end_marker, and limit params to
+ handle pagination, and the prefix and delimiter params to filter the
+ objects returned. By default only the first 10,000 objects are
+ returned; if you need to access more than that, set the 'full_listing'
+ parameter to True.
+ """
+ if full_listing:
+ return container.list_all(prefix=prefix)
+ return container.list(limit=limit, marker=marker, prefix=prefix,
+ delimiter=delimiter, end_marker=end_marker)
+
+
+ @assure_container
+ def list_object_names(self, container, marker=None, limit=None, prefix=None,
+ delimiter=None, end_marker=None, full_listing=False):
+ """
+ Return a list of then names of the objects in this container. You can
+ use the marker, end_marker, and limit params to handle pagination, and
+ the prefix and delimiter params to filter the objects returned. By
+ default only the first 10,000 objects are returned; if you need to
+ access more than that, set the 'full_listing' parameter to True.
+ """
+ return container.list_object_names(marker=marker, limit=limit,
+ prefix=prefix, delimiter=delimiter, end_marker=end_marker,
+ full_listing=full_listing)
+
+
+ @assure_container
+ def object_listing_iterator(self, container, prefix=None):
+ """
+ Returns an iterator that can be used to access the objects within this
+ container. They can be optionally limited by a prefix.
+ """
+ return StorageObjectIterator(container.object_manager, prefix=prefix)
+
+
+ @assure_container
+ def list_subdirs(self, container, marker=None, limit=None, prefix=None,
+ delimiter=None, full_listing=False):
+ """
+ Returns a list of StorageObjects representing the pseudo-subdirectories
+ in the specified container. You can use the marker and limit params to
+ handle pagination, and the prefix param to filter the objects returned.
+ The 'delimiter' parameter is ignored, as the only meaningful value is
+ '/'.
+ """
+ mthd = container.list_all if full_listing else container.list
+ objs = mthd(marker=marker, limit=limit, prefix=prefix, delimiter="/",
+ return_raw=True)
+ sdirs = [obj for obj in objs if "subdir" in obj]
+ for sdir in sdirs:
+ sdir["name"] = sdir["subdir"]
+ mgr = container.object_manager
+ return [StorageObject(mgr, sdir) for sdir in sdirs]
+
+
+ @assure_container
+ def get_object(self, container, obj):
+ """
+ Returns a StorageObject representing the requested object.
+ """
+ return container.get_object(obj)
+
+
+ @assure_container
+ def create_object(self, container, file_or_path=None, data=None,
+ obj_name=None, content_type=None, etag=None, content_encoding=None,
+ content_length=None, ttl=None, chunked=False, metadata=None,
+ chunk_size=None, headers=None, return_none=False):
+ """
+ Creates or replaces a storage object in the specified container.
+ Returns a StorageObject reference will be returned, unless the
+ 'return_none' parameter is True.
+
+ The content of the object can either be a stream of bytes (`data`), or
+ a file on disk (`file_or_path`). The disk file can be either an open
+ file-like object, or an absolute path to the file on disk.
+
+ When creating object from a data stream, you must specify the name of
+ the object to be created in the container via the `obj_name` parameter.
+ When working with a file, though, if no `obj_name` value is specified,
+ the file`s name will be used.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored. If no `content_type` is specified, the object storage system
+ will make an intelligent guess based on the content of the object.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+ """
+ return container.create(file_or_path=file_or_path, data=data,
+ obj_name=obj_name, content_type=content_type, etag=etag,
+ content_encoding=content_encoding,
+ content_length=content_length, ttl=ttl, chunked=chunked,
+ metadata=metadata, chunk_size=chunk_size, headers=headers,
+ return_none=return_none)
+
+
+ @assure_container
+ def fetch_object(self, container, obj, include_meta=False,
+ chunk_size=None, size=None, extra_info=None):
+ """
+ Fetches the object from storage.
+
+ If 'include_meta' is False, only the bytes representing the
+ stored object are returned.
+
+ Note: if 'chunk_size' is defined, you must fully read the object's
+ contents before making another request.
+
+ If 'size' is specified, only the first 'size' bytes of the object will
+ be returned. If the object if smaller than 'size', the entire object is
+ returned.
+
+ When 'include_meta' is True, what is returned from this method is a
+ 2-tuple:
+ Element 0: a dictionary containing metadata about the file.
+ Element 1: a stream of bytes representing the object's contents.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return container.fetch(obj, include_meta=include_meta,
+ chunk_size=chunk_size, size=size)
+
+
+ @assure_container
+ def fetch_partial(self, container, obj, size):
+ """
+ Returns the first 'size' bytes of an object. If the object is smaller
+ than the specified 'size' value, the entire object is returned.
+ """
+ return container.fetch_partial(obj, size)
+
+
+ @assure_container
+ def download_object(self, container, obj, directory, structure=True):
+ """
+ Fetches the object from storage, and writes it to the specified
+ directory. The directory must exist before calling this method.
+
+ If the object name represents a nested folder structure, such as
+ "foo/bar/baz.txt", that folder structure will be created in the target
+ directory by default. If you do not want the nested folders to be
+ created, pass `structure=False` in the parameters.
+ """
+ return container.download(obj, directory, structure=structure)
+
+
+ @assure_container
+ def delete_object(self, container, obj):
+ """
+ Deletes the object from the specified container.
+
+ The 'obj' parameter can either be the name of the object, or a
+ StorageObject representing the object to be deleted.
+ """
+ return container.delete_object(obj)
+
+
+ @_handle_container_not_found
+ def copy_object(self, container, obj, new_container, new_obj_name=None,
+ content_type=None):
+ """
+ Copies the object to the new container, optionally giving it a new name.
+ If you copy to the same container, you must supply a different name.
+
+ Returns the etag of the newly-copied object.
+
+ You can optionally change the content_type of the object by supplying
+ that in the 'content_type' parameter.
+ """
+ nm = new_obj_name or utils.get_name(obj)
+ uri = "/%s/%s" % (utils.get_name(new_container), nm)
+ copy_from = "/%s/%s" % (utils.get_name(container), utils.get_name(obj))
+ headers = {"X-Copy-From": copy_from,
+ "Content-Length": "0"}
+ if content_type:
+ headers["Content-Type"] = content_type
+ resp, resp_body = self.api.method_put(uri, headers=headers)
+ return resp.headers.get("etag")
+
+
+ def move_object(self, container, obj, new_container, new_obj_name=None,
+ new_reference=False, content_type=None):
+ """
+ Works just like copy_object, except that the source object is deleted
+ after a successful copy.
+
+ You can optionally change the content_type of the object by supplying
+ that in the 'content_type' parameter.
+
+ NOTE: any references to the original object will no longer be valid;
+ you will have to get a reference to the new object by passing True for
+ the 'new_reference' parameter. When this is True, a reference to the
+ newly moved object is returned. Otherwise, the etag for the moved
+ object is returned.
+ """
+ new_obj_etag = self.copy_object(container, obj, new_container,
+ new_obj_name=new_obj_name, content_type=content_type)
+ if not new_obj_etag:
+ return
+ # Copy succeeded; delete the original.
+ self.delete_object(container, obj)
+ if new_reference:
+ nm = new_obj_name or utils.get_name(obj)
+ return self.get_object(new_container, nm)
+ return new_obj_etag
+
+
+ @assure_container
+ def change_object_content_type(self, container, obj, new_ctype,
+ guess=False):
+ """
+ Copies object to itself, but applies a new content-type. The guess
+ feature requires the container to be CDN-enabled. If not, then the
+ content-type must be supplied. If using guess with a CDN-enabled
+ container, new_ctype can be set to None. Failure during the put will
+ result in an exception.
+ """
+ cname = utils.get_name(container)
+ oname = utils.get_name(obj)
+ if guess and container.cdn_enabled:
+ # Test against the CDN url to guess the content-type.
+ obj_url = "%s/%s" % (container.cdn_uri, oname)
+ new_ctype = mimetypes.guess_type(obj_url)[0]
+ return self.copy_object(container, obj, container,
+ content_type=new_ctype)
+
+
+ def delete_object_in_seconds(self, cont, obj, seconds, extra_info=None):
+ """
+ Sets the object in the specified container to be deleted after the
+ specified number of seconds.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ meta = {"X-Delete-After": seconds}
+ self.set_object_metadata(cont, obj, meta, clear=True, prefix="")
+
+
+ @assure_container
+ def get_object_metadata(self, container, obj):
+ """
+ Returns the metadata for the specified object as a dict.
+ """
+ return container.get_object_metadata(obj)
+
+
+ @assure_container
+ def set_object_metadata(self, container, obj, metadata, clear=False,
+ extra_info=None, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified object metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the object's metadata.
+
+ 'extra_info; is an optional dictionary which will be populated with
+ 'status', 'reason', and 'headers' keys from the underlying swiftclient
+ call.
+
+ By default, the standard object metadata prefix ('X-Object-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ return container.set_object_metadata(obj, metadata, clear=clear,
+ prefix=prefix)
+
+
+
+class StorageObject(BaseResource):
+ """
+ This class represents an object stored in a Container.
+ """
+ def __init__(self, manager, info, *args, **kwargs):
+ self._container = None
+ return super(StorageObject, self).__init__(manager, info, *args,
+ **kwargs)
+
+
+ def __repr__(self):
+ return "" % (self.name, self.content_type)
+
+
+ @property
+ def id(self):
+ """
+ StorageObjects use their 'name' attribute as their ID.
+ """
+ return self.name
+
+
+ @property
+ def total_bytes(self):
+ """ Alias for backwards compatibility."""
+ return self.bytes
+
+
+ @property
+ def etag(self):
+ """ Alias for backwards compatibility."""
+ return self.hash
+
+
+ @property
+ def container(self):
+ if not self._container:
+ self._container = self.manager.container
+ return self._container
+
+
+ def get(self, include_meta=False, chunk_size=None):
+ """
+ Fetches the object from storage.
+
+ If 'include_meta' is False, only the bytes representing the
+ file is returned.
+
+ Note: if 'chunk_size' is defined, you must fully read the object's
+ contents before making another request.
+
+ When 'include_meta' is True, what is returned from this method is a
+ 2-tuple:
+ Element 0: a dictionary containing metadata about the file.
+ Element 1: a stream of bytes representing the object's contents.
+ """
+ return self.manager.fetch(obj=self, include_meta=include_meta,
+ chunk_size=chunk_size)
+ # Changing the name of this method to 'fetch', as 'get' is overloaded.
+ fetch = get
+
+
+ def download(self, directory, structure=True):
+ """
+ Fetches the object from storage, and writes it to the specified
+ directory. The directory must exist before calling this method.
+
+ If the object name represents a nested folder structure, such as
+ "foo/bar/baz.txt", that folder structure will be created in the target
+ directory by default. If you do not want the nested folders to be
+ created, pass `structure=False` in the parameters.
+ """
+ return self.manager.download(self, directory, structure=structure)
+
+
+ def copy(self, new_container, new_obj_name=None, extra_info=None):
+ """
+ Copies this object to the new container, optionally giving it a new
+ name. If you copy to the same container, you must supply a different
+ name.
+ """
+ return self.container.copy_object(self, new_container,
+ new_obj_name=new_obj_name)
+
+
+ def move(self, new_container, new_obj_name=None, extra_info=None):
+ """
+ Works just like copy_object, except that this object is deleted after a
+ successful copy. This means that this storage_object reference will no
+ longer be valid.
+ """
+ return self.container.move_object(self, new_container,
+ new_obj_name=new_obj_name)
+
+
+ def change_content_type(self, new_ctype, guess=False):
+ """
+ Copies object to itself, but applies a new content-type. The guess
+ feature requires the container to be CDN-enabled. If not then the
+ content-type must be supplied. If using guess with a CDN-enabled
+ container, new_ctype can be set to None.
+ Failure during the put will result in a swift exception.
+ """
+ self.container.change_object_content_type(self, new_ctype=new_ctype,
+ guess=guess)
+
+
+ def purge(self, email_addresses=None):
+ """
+ Removes a CDN-enabled object from public access before the TTL expires.
+ Please note that there is a limit (at this time) of 25 such requests;
+ if you need to purge more than that, you must contact support.
+
+ If one or more email_addresses are included, an email confirming the
+ purge is sent to each address.
+ """
+ return self.manager.purge(self, email_addresses=email_addresses)
+
+
+ def get_metadata(self):
+ """
+ Returns the metadata for this object as a dict.
+ """
+ return self.manager.get_metadata(self)
+
+
+ def set_metadata(self, metadata, clear=False, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified object metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the object's metadata.
+
+ By default, the standard object metadata prefix ('X-Object-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ return self.manager.set_metadata(self, metadata, clear=clear,
+ prefix=prefix)
+
+
+ def remove_metadata_key(self, key, prefix=None):
+ """
+ Removes the specified key from the storage object's metadata. If the
+ key does not exist in the metadata, nothing is done.
+ """
+ self.manager.remove_metadata_key(self, key, prefix=prefix)
+
+
+ def get_temp_url(self, seconds, method="GET"):
+ """
+ Returns a URL that can be used to access this object. The URL will
+ expire after `seconds` seconds.
+
+ The only methods supported are GET and PUT. Anything else will raise
+ an InvalidTemporaryURLMethod exception.
+ """
+ return self.container.get_temp_url(self, seconds=seconds,
+ method=method)
+
+
+ def delete_in_seconds(self, seconds):
+ """
+ Sets the object to be deleted after the specified number of seconds.
+ """
+ self.container.delete_object_in_seconds(self, seconds)
+
+
+
+class StorageObjectIterator(utils.ResultsIterator):
+ """
+ Allows you to iterate over all the objects in a container, even if they
+ exceed the limit for any single listing call.
+ """
+ def _init_methods(self):
+ self.list_method = self.manager.list
+ # Swift uses the object name as its ID.
+ self.marker_att = "name"
+
+
+
+class StorageObjectManager(BaseManager):
+ """
+ Handles all the interactions with StorageObjects.
+ """
+ @property
+ def name(self):
+ """The URI base is the same as the container name."""
+ return self.uri_base
+
+
+ @property
+ def container(self):
+ try:
+ return self._container
+ except AttributeError:
+ cont = self.api.get(self.uri_base)
+ self._container = cont
+ return cont
+
+
+ def list(self, marker=None, limit=None, prefix=None, delimiter=None,
+ end_marker=None, return_raw=False):
+ uri = "/%s" % self.uri_base
+ qs = utils.dict_to_qs({"marker": marker, "limit": limit,
+ "prefix": prefix, "delimiter": delimiter,
+ "end_marker": end_marker})
+ if qs:
+ uri = "%s?%s" % (uri, qs)
+ resp, resp_body = self.api.method_get(uri)
+ if return_raw:
+ return resp_body
+ objs = [StorageObject(self, elem) for elem in resp_body]
+ return objs
+
+
+ @_handle_object_not_found
+ def get(self, obj):
+ """
+ Gets the information about the specified object.
+
+ This overrides the base behavior, since Swift uses HEAD to get
+ information, and GET to download the object.
+ """
+ name = utils.get_name(obj)
+ uri = "/%s/%s" % (self.uri_base, name)
+ resp, resp_body = self.api.method_head(uri)
+ hdrs = resp.headers
+ try:
+ content_length = int(hdrs.get("content-length"))
+ except (TypeError, ValueError):
+ content_length = None
+ data = {"name": name,
+ "bytes": content_length,
+ "content_type": hdrs.get("content-type"),
+ "hash": hdrs.get("etag"),
+ "last_modified": hdrs.get("last-modified"),
+ }
+ return StorageObject(self, data, loaded=True)
+
+
+ def create(self, file_or_path=None, data=None, obj_name=None,
+ content_type=None, etag=None, content_encoding=None,
+ content_length=None, ttl=None, chunked=False, metadata=None,
+ chunk_size=None, headers=None, return_none=False):
+ """
+ Creates or replaces a storage object in this container.
+
+ The content of the object can either be a stream of bytes (`data`), or
+ a file on disk (`file_or_path`). The disk file can be either an open
+ file-like object, or an absolute path to the file on disk.
+
+ When creating object from a data stream, you must specify the name of
+ the object to be created in the container via the `obj_name` parameter.
+ When working with a file, though, if no `obj_name` value is specified,
+ the file`s name will be used.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored. If no `content_type` is specified, the object storage system
+ will make an intelligent guess based on the content of the object.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+
+ If you wish to store a stream of data (i.e., where you don't know the
+ total size in advance), set the `chunked` parameter to True, and omit
+ the `content_length` and `etag` parameters. This allows the data to be
+ streamed to the object in the container without having to be written to
+ disk first.
+ """
+ # First make sure that there is a content source.
+ if (data, file_or_path) == (None, None):
+ raise exc.NoContentSpecified("You must specify either a file path, "
+ "an open file-like object, or a stream of bytes when "
+ "creating an object.")
+ src = data if data else file_or_path
+ if src is file_or_path:
+ obj_name = _validate_file_or_path(file_or_path, obj_name)
+ if not obj_name:
+ raise exc.MissingName("No name for the object to be created has "
+ "been specified, and none can be inferred from context")
+ if chunk_size:
+ chunked = True
+ if chunked:
+ chunk_size = chunk_size or DEFAULT_CHUNKSIZE
+ headers = headers or {}
+ if metadata:
+ metadata = _massage_metakeys(metadata, OBJECT_META_PREFIX)
+ headers = metadata
+ if ttl is not None:
+ headers["X-Delete-After"] = ttl
+ if src is data:
+ self._upload(obj_name, data, content_type, content_encoding,
+ content_length, etag, chunked, chunk_size, headers)
+ else:
+ if isinstance(file_or_path, file):
+ self._upload(obj_name, file_or_path, content_type,
+ content_encoding, content_length, etag, False,
+ headers)
+ else:
+ # Need to wrap the call in a context manager
+ with open(file_or_path, "rb") as ff:
+ self._upload(obj_name, ff, content_type, content_encoding,
+ content_length, etag, False, chunk_size, headers)
+ if return_none:
+ return
+ return self.get(obj_name)
+
+
+ def _upload(self, obj_name, content, content_type, content_encoding,
+ content_length, etag, chunked, chunk_size, headers):
+ """
+ Handles the uploading of content, including working around the 5GB
+ maximum file size.
+ """
+ if content_type is not None:
+ headers["Content-Type"] = content_type
+ if content_encoding is not None:
+ headers["Content-Encoding"] = content_encoding
+ if isinstance(content, six.string_types):
+ fsize = len(content)
+ else:
+ if chunked:
+ fsize = None
+ elif content_length is None:
+ fsize = get_file_size(content)
+ else:
+ fsize = content_length
+ if fsize <= MAX_FILE_SIZE:
+ # We can just upload it as-is.
+ return self._store_object(obj_name, content=content, etag=etag,
+ chunked=chunked, chunk_size=chunk_size, headers=headers)
+ # Files larger than MAX_FILE_SIZE must be segmented
+ # and uploaded separately.
+ num_segments = int(math.ceil(float(fsize) / MAX_FILE_SIZE))
+ digits = int(math.log10(num_segments)) + 1
+ # NOTE: This could be greatly improved with threading or other
+ # async design.
+ for segment in range(num_segments):
+ sequence = str(segment + 1).zfill(digits)
+ seg_name = "%s.%s" % (obj_name, sequence)
+ with utils.SelfDeletingTempfile() as tmpname:
+ with open(tmpname, "wb") as tmp:
+ tmp.write(content.read(MAX_FILE_SIZE))
+ with open(tmpname, "rb") as tmp:
+ # We have to calculate the etag for each segment
+ etag = utils.get_checksum(tmp)
+ self._store_object(seg_name, content=tmp, etag=etag,
+ chunked=False, headers=headers)
+ # Upload the manifest
+ headers.pop("ETag", "")
+ headers["X-Object-Manifest"] = "%s/%s." % (self.name, obj_name)
+ self._store_object(obj_name, content=None, headers=headers)
+
+
+ def _store_object(self, obj_name, content, etag=None, chunked=False,
+ chunk_size=None, headers=None):
+ """
+ Handles the low-level creation of a storage object and the uploading of
+ the contents of that object.
+ """
+ head_etag = headers.pop("ETag", "")
+ if chunked:
+ headers.pop("Content-Length", "")
+ headers["Transfer-Encoding"] = "chunked"
+ elif etag is None and content is not None:
+ etag = utils.get_checksum(content)
+ if etag:
+ headers["ETag"] = etag
+ if not headers.get("Content-Type"):
+ headers["Content-Type"] = None
+ uri = "/%s/%s" % (self.uri_base, obj_name)
+ resp, resp_body = self.api.method_put(uri, data=content,
+ headers=headers)
+
+
+ @_handle_object_not_found
+ def fetch(self, obj, include_meta=False, chunk_size=None, size=None,
+ extra_info=None):
+ """
+ Fetches the object from storage.
+
+ If 'include_meta' is False, only the bytes representing the
+ stored object are returned.
+
+ Note: if 'chunk_size' is defined, the 'include_meta' parameter is
+ ignored.
+
+ If 'size' is specified, only the first 'size' bytes of the object will
+ be returned. If the object if smaller than 'size', the entire object is
+ returned.
+
+ When 'include_meta' is True, what is returned from this method is a
+ 2-tuple:
+ Element 0: a dictionary containing metadata about the file.
+ Element 1: a stream of bytes representing the object's contents.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ uri = "/%s/%s" % (self.uri_base, utils.get_name(obj))
+ if chunk_size:
+ # Need the total size of the object
+ if not isinstance(obj, StorageObject):
+ obj = self.get(obj)
+ obj_size = obj.total_bytes
+ return self._fetch_chunker(uri, chunk_size, size, obj_size)
+ headers = {}
+ if size:
+ headers = {"Range": "bytes=0-%s" % size}
+ resp, resp_body = self.api.method_get(uri, headers=headers)
+ if include_meta:
+ meta_resp, meta_body = self.api.method_head(uri)
+ return (meta_resp.headers, resp_body)
+ return resp_body
+
+
+ def _fetch_chunker(self, uri, chunk_size, size, obj_size):
+ """
+ Returns a generator that returns an object in chunks.
+ """
+ pos = 0
+ total_bytes = 0
+ size = size or obj_size
+ max_size = min(size, obj_size)
+ while True:
+ endpos = min(obj_size, pos + chunk_size)
+ headers = {"Range": "bytes=%s-%s" % (pos, endpos)}
+ resp, resp_body = self.api.method_get(uri, headers=headers)
+ pos = endpos
+ if not resp_body:
+ # End of file
+ raise StopIteration
+ yield resp_body
+ total_bytes += len(resp_body)
+ if total_bytes >= max_size:
+ raise StopIteration
+
+
+ def fetch_partial(self, obj, size):
+ """
+ Returns the first 'size' bytes of an object. If the object is smaller
+ than the specified 'size' value, the entire object is returned.
+ """
+ return self.fetch(obj, size=size)
+
+
+ @_handle_object_not_found
+ def delete(self, obj):
+ """
+ Deletes the object if it exists; raises NoSuchObject exception if it
+ does not exist.
+ """
+ return super(StorageObjectManager, self).delete(obj)
+
+
+ def delete_all_objects(self, nms, async=False):
+ """
+ Deletes all objects from this container.
+
+ By default the call will block until all objects have been deleted. By
+ passing True for the 'async' parameter, this method will not block, and
+ instead return an object that can be used to follow the progress of the
+ deletion. When deletion is complete the bulk deletion object's
+ 'results' attribute will be populated with the information returned
+ from the API call. In synchronous mode this is the value that is
+ returned when the call completes. It is a dictionary with the following
+ keys:
+
+ deleted - the number of objects deleted
+ not_found - the number of objects not found
+ status - the HTTP return status code. '200 OK' indicates success
+ errors - a list of any errors returned by the bulk delete call
+ """
+ if nms is None:
+ nms = self.api.list_object_names(self.name)
+ return self.api.bulk_delete(self.name, nms, async=async)
+
+
+ @_handle_object_not_found
+ def download(self, obj, directory, structure=True):
+ """
+ Fetches the object from storage, and writes it to the specified
+ directory. The directory must exist before calling this method.
+
+ If the object name represents a nested folder structure, such as
+ "foo/bar/baz.txt", that folder structure will be created in the target
+ directory by default. If you do not want the nested folders to be
+ created, pass `structure=False` in the parameters.
+ """
+ if not os.path.isdir(directory):
+ raise exc.FolderNotFound("The directory '%s' does not exist." %
+ directory)
+ obj_name = utils.get_name(obj)
+ path, fname = os.path.split(obj_name)
+ if structure:
+ fullpath = os.path.join(directory, path)
+ if not os.path.exists(fullpath):
+ os.makedirs(fullpath)
+ target = os.path.join(fullpath, fname)
+ else:
+ target = os.path.join(directory, fname)
+ with open(target, "wb") as dl:
+ content = self.fetch(obj)
+ try:
+ dl.write(content)
+ except UnicodeEncodeError:
+ encoding = pyrax.get_encoding()
+ dl.write(content.encode(encoding))
+
+
+ @_handle_object_not_found
+ def purge(self, obj, email_addresses=None):
+ """
+ Removes a CDN-enabled object from public access before the TTL expires.
+ Please note that there is a limit (at this time) of 25 such requests;
+ if you need to purge more than that, you must contact support.
+
+ If one or more email_addresses are included, an email confirming the
+ purge is sent to each address.
+ """
+ cname = utils.get_name(self.container)
+ oname = utils.get_name(obj)
+ headers = {}
+ if email_addresses:
+ email_addresses = utils.coerce_string_to_list(email_addresses)
+ headers["X-Purge-Email"] = ", ".join(email_addresses)
+ uri = "/%s/%s" % (cname, oname)
+ resp, resp_body = self.api.cdn_request(uri, method="DELETE",
+ headers=headers)
+
+
+ @_handle_object_not_found
+ def get_metadata(self, obj, prefix=None):
+ """
+ Returns the metadata for the specified object as a dict.
+ """
+ uri = "/%s/%s" % (self.uri_base, utils.get_name(obj))
+ resp, resp_body = self.api.method_head(uri)
+ ret = {}
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = OBJECT_META_PREFIX
+ low_prefix = prefix.lower()
+ for hkey, hval in list(resp.headers.items()):
+ lowkey = hkey.lower()
+ if lowkey.startswith(low_prefix):
+ cleaned = hkey.replace(low_prefix, "").replace("-", "_")
+ ret[cleaned] = hval
+ return ret
+
+
+ @_handle_object_not_found
+ def set_metadata(self, obj, metadata, clear=False, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified object metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the object's metadata.
+
+ By default, the standard object metadata prefix ('X-Object-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ # Add the metadata prefix, if needed.
+ if prefix is None:
+ prefix = OBJECT_META_PREFIX
+ massaged = _massage_metakeys(metadata, prefix)
+ cname = utils.get_name(self.container)
+ oname = utils.get_name(obj)
+ new_meta = {}
+ # Note that the API for object POST is the opposite of that for
+ # container POST: for objects, all current metadata is deleted,
+ # whereas for containers you need to set the values to an empty
+ # string to delete them.
+ if not clear:
+ obj_meta = self.get_metadata(obj, prefix=prefix)
+ new_meta = _massage_metakeys(obj_meta, prefix)
+ utils.case_insensitive_update(new_meta, massaged)
+ # Remove any empty values, since the object metadata API will
+ # store them.
+ to_pop = []
+ for key, val in six.iteritems(new_meta):
+ if not val:
+ to_pop.append(key)
+ for key in to_pop:
+ new_meta.pop(key)
+ uri = "/%s/%s" % (cname, oname)
+ resp, resp_body = self.api.method_post(uri, headers=new_meta)
+
+
+ @_handle_object_not_found
+ def remove_metadata_key(self, obj, key):
+ """
+ Removes the specified key from the object's metadata. If the key does
+ not exist in the metadata, nothing is done.
+ """
+ meta_dict = {key: ""}
+ return self.set_metadata(obj, meta_dict)
+
+
+
+class StorageClient(BaseClient):
+ """
+ This is the primary class for interacting with OpenStack Object Storage.
+ """
+ name = "Object Storage"
+ # Folder upload status dict. Each upload will generate its own UUID key.
+ # The app can use that key query the status of the upload. This dict
+ # will also be used to hold the flag to interrupt uploads in progress.
+ folder_upload_status = {}
+ # Interval in seconds between checks for completion of bulk deletes.
+ bulk_delete_interval = 1
+
+ def __init__(self, *args, **kwargs):
+ # Constants used in metadata headers
+ super(StorageClient, self).__init__(*args, **kwargs)
+ self._cached_temp_url_key = None
+ self.cdn_management_url = ""
+ self.method_dict = {
+ "HEAD": self.method_head,
+ "GET": self.method_get,
+ "POST": self.method_post,
+ "PUT": self.method_put,
+ "DELETE": self.method_delete,
+ "PATCH": self.method_patch,
+ }
+ # Configure CDN, if available
+ self._configure_cdn()
+ # Alias old method names to new versions for backwards compatibility.
+ self._backwards_aliases()
+
+
+ def _configure_cdn(self):
+ """
+ Initialize CDN-related endpoints, if available.
+ """
+ ident = self.identity
+ cdn_svc = ident.services.get("object_cdn")
+ if cdn_svc:
+ ep = cdn_svc.endpoints.get(self.region_name)
+ if ep:
+ self.cdn_management_url = ep.public_url
+
+
+ def _backwards_aliases(self):
+ """
+ In order to keep this backwards-compatible with previous versions,
+ alias the old names to the new methods.
+ """
+ self.list_containers = self.list_container_names
+ self.get_all_containers = self.list
+ self.get_container = self.get
+ self.create_container = self.create
+ self.delete_container = self.delete
+ self.get_container_objects = self.list_container_objects
+ self.get_container_object_names = self.list_container_object_names
+ self.get_info = self.get_account_info
+
+
+ def get(self, item):
+ """
+ Returns the container whose name is provided as 'item'. If 'item' is
+ not a string, the original item is returned unchanged.
+ """
+ if isinstance(item, six.string_types):
+ item = super(StorageClient, self).get(item)
+ return item
+
+
+ def _configure_manager(self):
+ """
+ Creates a manager to handle interacting with Containers.
+ """
+ self._manager = ContainerManager(self, resource_class=Container,
+ response_key="", uri_base="")
+
+
+ def remove_container_from_cache(self, container):
+ """
+ Not used anymore. Included for backwards compatibility.
+ """
+ pass
+
+
+ def get_account_details(self):
+ """
+ Returns a dictionary containing information about the account.
+ """
+ headers = self._manager.get_account_headers()
+ acct_prefix = "x-account-"
+ meta_prefix = ACCOUNT_META_PREFIX.lower()
+ ret = {}
+ for hkey, hval in list(headers.items()):
+ lowkey = hkey.lower()
+ if lowkey.startswith(acct_prefix):
+ if not lowkey.startswith(meta_prefix):
+ cleaned = hkey.replace(acct_prefix, "").replace("-", "_")
+ try:
+ # Most values are ints
+ ret[cleaned] = int(hval)
+ except ValueError:
+ ret[cleaned] = hval
+ return ret
+
+
+ def get_account_info(self):
+ """
+ Returns a tuple for the number of containers and total bytes in the
+ account.
+ """
+ headers = self._manager.get_account_headers()
+ return (headers.get("x-account-container-count"),
+ headers.get("x-account-bytes-used"))
+
+
+ def get_account_metadata(self, prefix=None):
+ """
+ Returns a dictionary containing metadata about the account.
+ """
+ return self._manager.get_account_metadata(prefix=prefix)
+
+
+ def set_account_metadata(self, metadata, clear=False, prefix=None,
+ extra_info=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ account's metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the account's metadata.
+
+ By default, the standard account metadata prefix ('X-Account-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.set_account_metadata(metadata, clear=clear,
+ prefix=prefix)
+
+
+ def delete_account_metadata(self, prefix=None):
+ """
+ Removes all metadata matching the specified prefix from the account.
+
+ By default, the standard account metadata prefix ('X-Account-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ return self._manager.delete_account_metadata(prefix=prefix)
+
+
+ def get_temp_url_key(self, cached=True):
+ """
+ Returns the current TempURL key, or None if it has not been set.
+
+ By default the value returned is cached. To force an API call to get
+ the current value on the server, pass `cached=False`.
+ """
+ meta = self._cached_temp_url_key
+ if not cached or not meta:
+ key = "temp_url_key"
+ meta = self.get_account_metadata().get(key)
+ self._cached_temp_url_key = meta
+ return meta
+
+
+ def set_temp_url_key(self, key=None):
+ """
+ Sets the key for the Temporary URL for the account. It should be a key
+ that is secret to the owner.
+
+ If no key is provided, a UUID value will be generated and used. It can
+ later be obtained by calling get_temp_url_key().
+ """
+ if key is None:
+ key = uuid.uuid4().hex
+ meta = {"Temp-Url-Key": key}
+ self.set_account_metadata(meta)
+ self._cached_temp_url_key = key
+
+
+ def get_temp_url(self, container, obj, seconds, method="GET", key=None,
+ cached=True):
+ """
+ Given a storage object in a container, returns a URL that can be used
+ to access that object. The URL will expire after `seconds` seconds.
+
+ The only methods supported are GET and PUT. Anything else will raise
+ an `InvalidTemporaryURLMethod` exception.
+
+ If you have your Temporary URL key, you can pass it in directly and
+ potentially save an API call to retrieve it. If you don't pass in the
+ key, and don't wish to use any cached value, pass `cached=False`.
+ """
+ return self._manager.get_temp_url(container, obj, seconds,
+ method=method, key=key, cached=cached)
+
+
+ def list_public_containers(self):
+ """
+ Returns a list of the names of all CDN-enabled containers.
+ """
+ return self._manager.list_public_containers()
+
+
+ def make_container_public(self, container, ttl=None):
+ """
+ Enables CDN access for the specified container, and optionally sets the
+ TTL for the container.
+ """
+ return self._manager.make_public(container, ttl=ttl)
+
+
+ def make_container_private(self, container):
+ """
+ Disables CDN access to a container. It may still appear public until
+ its TTL expires.
+ """
+ return self._manager.make_private(container)
+
+
+ def get_cdn_log_retention(self, container):
+ """
+ Returns the status of the setting for CDN log retention for the
+ specified container.
+ """
+ return self._manager.get_cdn_log_retention(container)
+
+
+ def set_cdn_log_retention(self, container, enabled):
+ """
+ Enables or disables whether CDN access logs for the specified container
+ are collected and stored on Cloud Files.
+ """
+ return self._manager.set_cdn_log_retention(container, enabled)
+
+
+ def get_container_streaming_uri(self, container):
+ """
+ Returns the URI for streaming content, or None if CDN is not enabled.
+ """
+ return self._manager.get_container_streaming_uri(container)
+
+
+ def get_container_ios_uri(self, container):
+ """
+ Returns the iOS URI, or None if CDN is not enabled.
+ """
+ return self._manager.get_container_ios_uri(container)
+
+
+ def set_container_web_index_page(self, container, page):
+ """
+ Sets the header indicating the index page in a container
+ when creating a static website.
+
+ Note: the container must be CDN-enabled for this to have
+ any effect.
+ """
+ return self._manager.set_web_index_page(container, page)
+
+
+ def set_container_web_error_page(self, container, page):
+ """
+ Sets the header indicating the error page in a container
+ when creating a static website.
+
+ Note: the container must be CDN-enabled for this to have
+ any effect.
+ """
+ return self._manager.set_web_error_page(container, page)
+
+
+ def purge_cdn_object(self, container, obj, email_addresses=None):
+ """
+ Removes a CDN-enabled object from public access before the TTL expires.
+ Please note that there is a limit (at this time) of 25 such requests;
+ if you need to purge more than that, you must contact support.
+
+ If one or more email_addresses are included, an email confirming the
+ purge is sent to each address.
+ """
+ return self._manager.purge_cdn_object(container, obj,
+ email_addresses=email_addresses)
+
+
+ def list_container_names(self):
+ """
+ Returns a list of the names of the containers in this account.
+ """
+ return [cont.name for cont in self.list()]
+
+
+ def list_containers_info(self, limit=None, marker=None):
+ """Returns a list of info on Containers.
+
+ For each container, a dict containing the following keys is returned:
+ \code
+ name - the name of the container
+ count - the number of objects in the container
+ bytes - the total bytes in the container
+ """
+ return self._manager.list_containers_info(limit=limit, marker=marker)
+
+
+ def list_container_subdirs(self, container, limit=None, marker=None,
+ prefix=None, delimiter=None, full_listing=False):
+ """
+ Although you cannot nest directories, you can simulate a hierarchical
+ structure within a single container by adding forward slash characters
+ (/) in the object name. This method returns a list of all of these
+ pseudo-subdirectories in the specified container.
+ """
+ return self._manager.list_subdirs(container, limit=limit,
+ marker=marker, prefix=prefix, delimiter=delimiter,
+ full_listing=full_listing)
+
+
+ def list_container_object_names(self, container, limit=None, marker=None,
+ prefix=None, delimiter=None, full_listing=False):
+ """
+ Returns the names of all the objects in the specified container,
+ optionally limited by the pagination parameters.
+ """
+ return self._manager.list_object_names(container, marker=marker,
+ limit=limit, prefix=prefix, delimiter=delimiter,
+ full_listing=full_listing)
+
+
+ def get_container_metadata(self, container, prefix=None):
+ """
+ Returns a dictionary containing the metadata for the container.
+ """
+ return self._manager.get_metadata(container, prefix=prefix)
+
+
+ def set_container_metadata(self, container, metadata, clear=False,
+ prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified container metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the container's metadata.
+
+ By default, the standard container metadata prefix
+ ('X-Container-Meta-') is prepended to the header name if it isn't
+ present. For non-standard headers, you must include a non-None prefix,
+ such as an empty string.
+ """
+ return self._manager.set_metadata(container, metadata, clear=clear,
+ prefix=prefix)
+
+
+ def remove_container_metadata_key(self, container, key):
+ """
+ Removes the specified key from the container's metadata. If the key
+ does not exist in the metadata, nothing is done.
+ """
+ return self._manager.remove_metadata_key(container, key)
+
+
+ def delete_container_metadata(self, container, prefix=None):
+ """
+ Removes all of thethe container's metadata.
+
+ By default, all metadata beginning with the standard container metadata
+ prefix ('X-Container-Meta-') is removed. If you wish to remove all
+ metadata beginning with a different prefix, you must specify that
+ prefix.
+ """
+ return self._manager.delete_metadata(container, prefix=prefix)
+
+
+ def get_container_cdn_metadata(self, container):
+ """
+ Returns a dictionary containing the CDN metadata for the container.
+ """
+ return self._manager.get_cdn_metadata(container)
+
+
+ def set_container_cdn_metadata(self, container, metadata):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates
+ the specified container metadata with them.
+
+ NOTE: arbitrary metadata headers are not allowed. The only metadata
+ you can update are: X-Log-Retention, X-CDN-enabled, and X-TTL.
+ """
+ return self._manager.set_cdn_metadata(container, metadata)
+
+
+ def get_object_metadata(self, container, obj):
+ """
+ Returns the metadata for the specified object as a dict.
+ """
+ return self._manager.get_object_metadata(container, obj)
+
+
+ def set_object_metadata(self, container, obj, metadata, clear=False,
+ extra_info=None, prefix=None):
+ """
+ Accepts a dictionary of metadata key/value pairs and updates the
+ specified object metadata with them.
+
+ If 'clear' is True, any existing metadata is deleted and only the
+ passed metadata is retained. Otherwise, the values passed here update
+ the object's metadata.
+
+ 'extra_info; is an optional dictionary which will be populated with
+ 'status', 'reason', and 'headers' keys from the underlying swiftclient
+ call.
+
+ By default, the standard object metadata prefix ('X-Object-Meta-') is
+ prepended to the header name if it isn't present. For non-standard
+ headers, you must include a non-None prefix, such as an empty string.
+ """
+ return self._manager.set_object_metadata(container, obj, metadata,
+ clear=clear, prefix=prefix)
+
+
+ def remove_object_metadata_key(self, container, obj, key, prefix=None):
+ """
+ Removes the specified key from the storage object's metadata. If the key
+ does not exist in the metadata, nothing is done.
+ """
+ self.set_object_metadata(container, obj, {key: ""}, prefix=prefix)
+
+
+ def list_container_objects(self, container, limit=None, marker=None,
+ prefix=None, delimiter=None, end_marker=None, full_listing=False):
+ """
+ Return a list of StorageObjects representing the objects in the
+ container. You can use the marker, end_marker, and limit params to
+ handle pagination, and the prefix and delimiter params to filter the
+ objects returned. Also, by default only the first 10,000 objects are
+ returned; if you set full_listing to True, an iterator to return all
+ the objects in the container is returned. In this case, only the
+ 'prefix' parameter is used; if you specify any others, they are
+ ignored.
+ """
+ if full_listing:
+ return self._manager.object_listing_iterator(container,
+ prefix=prefix)
+ return self._manager.list_objects(container, limit=limit,
+ marker=marker, prefix=prefix, delimiter=delimiter,
+ end_marker=end_marker)
+
+
+ def object_listing_iterator(self, container, prefix=None):
+ return self._manager.object_listing_iterator(container, prefix=prefix)
+
+
+ def delete_object_in_seconds(self, cont, obj, seconds, extra_info=None):
+ """
+ Sets the object in the specified container to be deleted after the
+ specified number of seconds.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.delete_object_in_seconds(cont, obj, seconds)
+
+
+ def get_object(self, container, obj):
+ """
+ Returns a StorageObject representing the requested object.
+ """
+ return self._manager.get_object(container, obj)
+
+
+ def store_object(self, container, obj_name, data, content_type=None,
+ etag=None, content_encoding=None, ttl=None, return_none=False,
+ chunk_size=None, headers=None, metadata=None, extra_info=None):
+ """
+ Creates a new object in the specified container, and populates it with
+ the given data. A StorageObject reference to the uploaded file
+ will be returned, unless 'return_none' is set to True.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.create_object(container, obj_name=obj_name, data=data,
+ content_type=content_type, etag=etag,
+ content_encoding=content_encoding, ttl=ttl,
+ return_none=return_none, chunk_size=chunk_size,
+ headers=headers, metadata=metadata)
+
+
+ def upload_file(self, container, file_or_path, obj_name=None,
+ content_type=None, etag=None, content_encoding=None, ttl=None,
+ content_length=None, return_none=False, headers=None,
+ metadata=None, extra_info=None):
+ """
+ Uploads the specified file to the container. If no name is supplied,
+ the file's name will be used. Either a file path or an open file-like
+ object may be supplied. A StorageObject reference to the uploaded file
+ will be returned, unless 'return_none' is set to True.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self.create_object(container, file_or_path=file_or_path,
+ obj_name=obj_name, content_type=content_type, etag=etag,
+ content_encoding=content_encoding, ttl=ttl, headers=headers,
+ metadata=metadata, return_none=return_none)
+
+
+ def create_object(self, container, file_or_path=None, data=None,
+ obj_name=None, content_type=None, etag=None, content_encoding=None,
+ content_length=None, ttl=None, chunk_size=None, metadata=None,
+ headers=None, return_none=False):
+ """
+ Creates or replaces a storage object in the specified container.
+
+ The content of the object can either be a stream of bytes (`data`), or
+ a file on disk (`file_or_path`). The disk file can be either an open
+ file-like object, or an absolute path to the file on disk.
+
+ When creating object from a data stream, you must specify the name of
+ the object to be created in the container via the `obj_name` parameter.
+ When working with a file, though, if no `obj_name` value is specified,
+ the file`s name will be used.
+
+ You may optionally set the `content_type` and `content_encoding`
+ parameters; pyrax will create the appropriate headers when the object
+ is stored. If no `content_type` is specified, the object storage system
+ will make an intelligent guess based on the content of the object.
+
+ If the size of the file is known, it can be passed as `content_length`.
+
+ If you wish for the object to be temporary, specify the time it should
+ be stored in seconds in the `ttl` parameter. If this is specified, the
+ object will be deleted after that number of seconds.
+
+ If you wish to store a stream of data (i.e., where you don't know the
+ total size in advance), set the `chunk_size` parameter to a non-zero
+ value, and omit the `content_length` and `etag` parameters. This allows
+ the data to be streamed to the object in the container without having
+ to be written to disk first.
+ """
+ return self._manager.create_object(container, file_or_path=file_or_path,
+ data=data, obj_name=obj_name, content_type=content_type,
+ etag=etag, content_encoding=content_encoding,
+ content_length=content_length, ttl=ttl, chunk_size=chunk_size,
+ metadata=metadata, headers=headers, return_none=return_none)
+
+
+ def fetch_object(self, container, obj, include_meta=False,
+ chunk_size=None, size=None, extra_info=None):
+ """
+ Fetches the object from storage.
+
+ If 'include_meta' is False, only the bytes representing the
+ stored object are returned.
+
+ Note: if 'chunk_size' is defined, you must fully read the object's
+ contents before making another request.
+
+ If 'size' is specified, only the first 'size' bytes of the object will
+ be returned. If the object if smaller than 'size', the entire object is
+ returned.
+
+ When 'include_meta' is True, what is returned from this method is a
+ 2-tuple:
+ Element 0: a dictionary containing metadata about the file.
+ Element 1: a stream of bytes representing the object's contents.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.fetch_object(container, obj,
+ include_meta=include_meta, chunk_size=chunk_size, size=size)
+
+
+ def fetch_partial(self, container, obj, size):
+ """
+ Returns the first 'size' bytes of an object. If the object is smaller
+ than the specified 'size' value, the entire object is returned.
+ """
+ return self._manager.fetch_partial(container, obj, size)
+
+
+ def fetch_dlo(self, container, name, chunk_size=None, verbose=False):
+ """
+ Returns a list of 2-tuples in the form of (object_name,
+ fetch_generator) representing the components of a multi-part DLO
+ (Dynamic Large Object). Each fetch_generator object can be interated
+ to retrieve its contents.
+
+ This is useful when transferring a DLO from one object storage system
+ to another. Examples would be copying DLOs from one region of a
+ provider to another, or copying a DLO from one provider to another.
+ """
+ if chunk_size is None:
+ chunk_size = DEFAULT_CHUNKSIZE
+
+ class FetchChunker(object):
+ """
+ Class that takes the generator objects returned by a chunked
+ fetch_object() call and wraps them to behave as file-like objects
+ for uploading.
+ """
+ def __init__(self, gen, verbose=False):
+ self.gen = gen
+ self.verbose = verbose
+ self.processed = 0
+ self.count = 0
+ self.interval = 100
+
+ def read(self, size=None):
+ self.count += 1
+ if self.verbose:
+ if self.count > self.interval:
+ self.count = 0
+ print(".")
+ ret = self.gen.next()
+ self.processed += len(ret)
+ return ret
+
+ parts = self.get_container_objects(container, prefix=name)
+ fetches = [(part.name, self.fetch_object(container, part.name,
+ chunk_size=chunk_size))
+ for part in parts
+ if part.name != name]
+ job = [(fetch[0], FetchChunker(fetch[1], verbose=verbose))
+ for fetch in fetches]
+ return job
+
+
+ def download_object(self, container, obj, directory, structure=True):
+ """
+ Fetches the object from storage, and writes it to the specified
+ directory. The directory must exist before calling this method.
+
+ If the object name represents a nested folder structure, such as
+ "foo/bar/baz.txt", that folder structure will be created in the target
+ directory by default. If you do not want the nested folders to be
+ created, pass `structure=False` in the parameters.
+ """
+ return self._manager.download_object(container, obj, directory,
+ structure=structure)
+
+
+ def delete(self, container, del_objects=False):
+ """
+ Deletes the specified container. If the container contains objects, the
+ command will fail unless 'del_objects' is passed as True. In that case,
+ each object will be deleted first, and then the container.
+ """
+ return self._manager.delete(container, del_objects=del_objects)
+
+
+ def delete_object(self, container, obj):
+ """
+ Deletes the object from the specified container.
+
+ The 'obj' parameter can either be the name of the object, or a
+ StorageObject representing the object to be deleted.
+ """
+ return self._manager.delete_object(container, obj)
+
+
+ def copy_object(self, container, obj, new_container, new_obj_name=None,
+ content_type=None, extra_info=None):
+ """
+ Copies the object to the new container, optionally giving it a new name.
+ If you copy to the same container, you must supply a different name.
+
+ You can optionally change the content_type of the object by supplying
+ that in the 'content_type' parameter.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.copy_object(container, obj, new_container,
+ new_obj_name=new_obj_name, content_type=content_type)
+
+
+ def move_object(self, container, obj, new_container, new_obj_name=None,
+ new_reference=False, content_type=None, extra_info=None):
+ """
+ Works just like copy_object, except that the source object is deleted
+ after a successful copy.
+
+ You can optionally change the content_type of the object by supplying
+ that in the 'content_type' parameter.
+
+ NOTE: any references to the original object will no longer be valid;
+ you will have to get a reference to the new object by passing True for
+ the 'new_reference' parameter. When this is True, a reference to the
+ newly moved object is returned. Otherwise, the etag for the moved
+ object is returned.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.move_object(container, obj, new_container,
+ new_obj_name=new_obj_name, new_reference=new_reference,
+ content_type=content_type)
+
+
+ def change_object_content_type(self, container, obj, new_ctype,
+ guess=False, extra_info=None):
+ """
+ Copies object to itself, but applies a new content-type. The guess
+ feature requires the container to be CDN-enabled. If not then the
+ content-type must be supplied. If using guess with a CDN-enabled
+ container, new_ctype can be set to None. Failure during the put will
+ result in a swift exception.
+
+ The 'extra_info' parameter is included for backwards compatibility. It
+ is no longer used at all, and will not be modified with swiftclient
+ info, since swiftclient is not used any more.
+ """
+ return self._manager.change_object_content_type(container, obj,
+ new_ctype, guess=guess)
+
+
+ def upload_folder(self, folder_path, container=None, ignore=None, ttl=None):
+ """
+ Convenience method for uploading an entire folder, including any
+ sub-folders, to Cloud Files.
+
+ All files will be uploaded to objects with the same name as the file.
+ In the case of nested folders, files will be named with the full path
+ relative to the base folder. E.g., if the folder you specify contains a
+ folder named 'docs', and 'docs' contains a file named 'install.html',
+ that file will be uploaded to an object named 'docs/install.html'.
+
+ If 'container' is specified, the folder's contents will be uploaded to
+ that container. If it is not specified, a new container with the same
+ name as the specified folder will be created, and the files uploaded to
+ this new container.
+
+ You can selectively ignore files by passing either a single pattern or
+ a list of patterns; these will be applied to the individual folder and
+ file names, and any names that match any of the 'ignore' patterns will
+ not be uploaded. The patterns should be standard *nix-style shell
+ patterns; e.g., '*pyc' will ignore all files ending in 'pyc', such as
+ 'program.pyc' and 'abcpyc'.
+
+ The upload will happen asynchronously; in other words, the call to
+ upload_folder() will generate a UUID and return a 2-tuple of (UUID,
+ total_bytes) immediately. Uploading will happen in the background; your
+ app can call get_uploaded(uuid) to get the current status of the
+ upload. When the upload is complete, the value returned by
+ get_uploaded(uuid) will match the total_bytes for the upload.
+
+ If you start an upload and need to cancel it, call
+ cancel_folder_upload(uuid), passing the uuid returned by the initial
+ call. It will then be up to you to either keep or delete the
+ partially-uploaded content.
+
+ If you specify a `ttl` parameter, the uploaded files will be deleted
+ after that number of seconds.
+ """
+ if not os.path.isdir(folder_path):
+ raise exc.FolderNotFound("No such folder: '%s'" % folder_path)
+
+ ignore = utils.coerce_string_to_list(ignore)
+ total_bytes = utils.folder_size(folder_path, ignore)
+ upload_key = str(uuid.uuid4())
+ self.folder_upload_status[upload_key] = {"continue": True,
+ "total_bytes": total_bytes,
+ "uploaded": 0,
+ }
+ self._upload_folder_in_background(folder_path, container, ignore,
+ upload_key, ttl)
+ return (upload_key, total_bytes)
+
+
+ def _upload_folder_in_background(self, folder_path, container, ignore,
+ upload_key, ttl=None):
+ """Runs the folder upload in the background."""
+ uploader = FolderUploader(folder_path, container, ignore, upload_key,
+ self, ttl=ttl)
+ uploader.start()
+
+
+ def sync_folder_to_container(self, folder_path, container, delete=False,
+ include_hidden=False, ignore=None, ignore_timestamps=False,
+ object_prefix="", verbose=False):
+ """
+ Compares the contents of the specified folder, and checks to make sure
+ that the corresponding object is present in the specified container. If
+ there is no remote object matching the local file, it is created. If a
+ matching object exists, the etag is examined to determine if the object
+ in the container matches the local file; if they differ, the container
+ is updated with the local file if the local file is newer when
+ `ignore_timestamps' is False (default). If `ignore_timestamps` is True,
+ the object is overwritten with the local file contents whenever the
+ etags differ. NOTE: the timestamp of a remote object is the time it was
+ uploaded, not the original modification time of the file stored in that
+ object. Unless 'include_hidden' is True, files beginning with an
+ initial period are ignored.
+
+ If the 'delete' option is True, any objects in the container that do
+ not have corresponding files in the local folder are deleted.
+
+ You can selectively ignore files by passing either a single pattern or
+ a list of patterns; these will be applied to the individual folder and
+ file names, and any names that match any of the 'ignore' patterns will
+ not be uploaded. The patterns should be standard *nix-style shell
+ patterns; e.g., '*pyc' will ignore all files ending in 'pyc', such as
+ 'program.pyc' and 'abcpyc'.
+
+ If `object_prefix` is set it will be appended to the object name when
+ it is checked and uploaded to the container. For example, if you use
+ sync_folder_to_container("folderToSync/", myContainer,
+ object_prefix="imgFolder") it will upload the files to the
+ container/imgFolder/... instead of just container/...
+
+ Set `verbose` to True to make it print what is going on. It will
+ show which files are being uploaded and which ones are not and why.
+ """
+ cont = self.get_container(container)
+ self._local_files = []
+ # Load a list of all the remote objects so we don't have to keep
+ # hitting the service
+ if verbose:
+ log = logging.getLogger("pyrax")
+ log.info("Loading remote object list (prefix=%s)", object_prefix)
+ data = cont.get_objects(prefix=object_prefix, full_listing=True)
+ self._remote_files = dict((d.name, d) for d in data)
+ self._sync_folder_to_container(folder_path, cont, prefix="",
+ delete=delete, include_hidden=include_hidden, ignore=ignore,
+ ignore_timestamps=ignore_timestamps,
+ object_prefix=object_prefix, verbose=verbose)
+ # Unset the _remote_files
+ self._remote_files = None
+
+
+ def _sync_folder_to_container(self, folder_path, container, prefix, delete,
+ include_hidden, ignore, ignore_timestamps, object_prefix, verbose):
+ """
+ This is the internal method that is called recursively to handle
+ nested folder structures.
+ """
+ fnames = os.listdir(folder_path)
+ ignore = utils.coerce_string_to_list(ignore)
+ log = logging.getLogger("pyrax")
+ if not include_hidden:
+ ignore.append(".*")
+ for fname in fnames:
+ if utils.match_pattern(fname, ignore):
+ continue
+ pth = os.path.join(folder_path, fname)
+ if os.path.isdir(pth):
+ subprefix = fname
+ if prefix:
+ subprefix = "%s/%s" % (prefix, subprefix)
+ self._sync_folder_to_container(pth, container, prefix=subprefix,
+ delete=delete, include_hidden=include_hidden,
+ ignore=ignore, ignore_timestamps=ignore_timestamps,
+ object_prefix=object_prefix, verbose=verbose)
+ continue
+ self._local_files.append(os.path.join(object_prefix, prefix,
+ fname))
+ local_etag = utils.get_checksum(pth)
+ if object_prefix:
+ prefix = os.path.join(prefix, object_prefix)
+ fullname_with_prefix = os.path.join(prefix, fname)
+ try:
+ obj = self._remote_files[fullname_with_prefix]
+ obj_etag = obj.etag
+ except KeyError:
+ obj = None
+ obj_etag = None
+ if local_etag != obj_etag:
+ if not ignore_timestamps:
+ if obj:
+ obj_time_str = obj.last_modified[:19]
+ else:
+ obj_time_str = EARLY_DATE_STR
+ local_mod = datetime.datetime.utcfromtimestamp(
+ os.stat(pth).st_mtime)
+ local_mod_str = local_mod.isoformat()
+ if obj_time_str >= local_mod_str:
+ # Remote object is newer
+ if verbose:
+ log.info("%s NOT UPLOADED because remote object is "
+ "newer", fullname_with_prefix)
+ log.info(" Local: %s Remote: %s" % (
+ local_mod_str, obj_time_str))
+ continue
+ container.upload_file(pth, obj_name=fullname_with_prefix,
+ etag=local_etag, return_none=True)
+ if verbose:
+ log.info("%s UPLOADED", fullname_with_prefix)
+ else:
+ if verbose:
+ log.info("%s NOT UPLOADED because it already exists",
+ fullname_with_prefix)
+ if delete and not prefix:
+ self._delete_objects_not_in_list(container, object_prefix)
+
+
+ def _delete_objects_not_in_list(self, cont, object_prefix=""):
+ """
+ Finds all the objects in the specified container that are not present
+ in the self._local_files list, and deletes them.
+ """
+ objnames = set(cont.get_object_names(prefix=object_prefix,
+ full_listing=True))
+ localnames = set(self._local_files)
+ to_delete = list(objnames.difference(localnames))
+ # We don't need to wait around for this to complete. Store the thread
+ # reference in case it is needed at some point.
+ self._thread = self.bulk_delete(cont, to_delete, async=True)
+
+
+ def bulk_delete(self, container, object_names, async=False):
+ """
+ Deletes multiple objects from a container in a single call.
+
+ The bulk deletion call does not return until all of the specified
+ objects have been processed. For large numbers of objects, this can
+ take quite a while, so there is an 'async' parameter to give you the
+ option to have this call return immediately. If 'async' is True, an
+ object is returned with a 'completed' attribute that will be set to
+ True as soon as the bulk deletion is complete, and a 'results'
+ attribute that will contain a dictionary (described below) with the
+ results of the bulk deletion.
+
+ When deletion is complete the bulk deletion object's 'results'
+ attribute will be populated with the information returned from the API
+ call. In synchronous mode this is the value that is returned when the
+ call completes. It is a dictionary with the following keys:
+
+ deleted - the number of objects deleted
+ not_found - the number of objects not found
+ status - the HTTP return status code. '200 OK' indicates success
+ errors - a list of any errors returned by the bulk delete call
+
+ This isn't available in swiftclient yet, so it's using code patterned
+ after the client code in that library.
+ """
+ deleter = BulkDeleter(self, container, object_names)
+ deleter.start()
+ if async:
+ return deleter
+ while not deleter.completed:
+ time.sleep(self.bulk_delete_interval)
+ return deleter.results
+
+
+ def cdn_request(self, uri, method, *args, **kwargs):
+ """
+ If the service supports CDN, use this method to access CDN-specific
+ URIs.
+ """
+ if not self.cdn_management_url:
+ raise exc.NotCDNEnabled("CDN is not enabled for this service.")
+ cdn_uri = "%s%s" % (self.cdn_management_url, uri)
+ mthd = self.method_dict.get(method.upper())
+ try:
+ resp, resp_body = mthd(cdn_uri, *args, **kwargs)
+ except exc.NotFound as e:
+ # This could be due to either the container does not exist, or that
+ # the container exists but is not CDN-enabled.
+ try:
+ mgt_uri = "%s%s" % (self.management_url, uri)
+ resp, resp_body = self.method_head(mgt_uri)
+ except exc.NotFound:
+ raise
+ raise exc.NotCDNEnabled("This container is not CDN-enabled.")
+ return resp, resp_body
+
+
+ @_valid_upload_key
+ def _update_progress(self, upload_key, size):
+ self.folder_upload_status[upload_key]["uploaded"] += size
+
+
+ @_valid_upload_key
+ def get_uploaded(self, upload_key):
+ """Returns the number of bytes uploaded for the specified process."""
+ return self.folder_upload_status[upload_key]["uploaded"]
+
+
+ @_valid_upload_key
+ def cancel_folder_upload(self, upload_key):
+ """
+ Cancels any folder upload happening in the background. If there is no
+ such upload in progress, calling this method has no effect.
+ """
+ self.folder_upload_status[upload_key]["continue"] = False
+
+
+ @_valid_upload_key
+ def _should_abort_folder_upload(self, upload_key):
+ """
+ Returns True if the user has canceled upload; returns False otherwise.
+ """
+ return not self.folder_upload_status[upload_key]["continue"]
+
+
+
+class FolderUploader(threading.Thread):
+ """
+ Threading class to allow for uploading multiple files in the background.
+ """
+ def __init__(self, root_folder, container, ignore, upload_key, client,
+ ttl=None):
+ self.root_folder = root_folder.rstrip("/")
+ self.ignore = utils.coerce_string_to_list(ignore)
+ self.upload_key = upload_key
+ self.ttl = ttl
+ self.client = client
+ if container:
+ if isinstance(container, six.string_types):
+ self.container = self.client.create(container)
+ else:
+ self.container = container
+ else:
+ self.container = self.client.create(
+ self.folder_name_from_path(root_folder))
+ threading.Thread.__init__(self)
+
+
+ @staticmethod
+ def folder_name_from_path(pth):
+ """Convenience method that first strips trailing path separators."""
+ return os.path.basename(pth.rstrip(os.sep))
+
+
+ def upload_files_in_folder(self, arg, dirname, fnames):
+ """Handles the iteration across files within a folder."""
+ if utils.match_pattern(dirname, self.ignore):
+ return False
+ good_names = (nm for nm in fnames
+ if not utils.match_pattern(nm, self.ignore))
+ for fname in good_names:
+ if self.client._should_abort_folder_upload(self.upload_key):
+ return
+ full_path = os.path.join(dirname, fname)
+ if os.path.isdir(full_path):
+ # Skip folders; os.walk will include them in the next pass.
+ continue
+ obj_name = os.path.relpath(full_path, self.root_folder)
+ obj_size = os.stat(full_path).st_size
+ self.client.upload_file(self.container, full_path,
+ obj_name=obj_name, return_none=True, ttl=self.ttl)
+ self.client._update_progress(self.upload_key, obj_size)
+
+
+ def run(self):
+ """Starts the uploading thread."""
+ root_path, folder_name = os.path.split(self.root_folder)
+ self.root_folder = os.path.join(root_path, folder_name)
+ os.path.walk(self.root_folder, self.upload_files_in_folder, None)
+
+
+
+class BulkDeleter(threading.Thread):
+ """
+ Threading class to allow for bulk deletion of objects from a container.
+ """
+ completed = False
+ results = None
+
+ def __init__(self, client, container, object_names):
+ self.client = client
+ self.container = container
+ self.object_names = object_names
+ threading.Thread.__init__(self)
+
+
+ def run(self):
+ client = self.client
+ container = self.container
+ object_names = self.object_names
+ cname = utils.get_name(container)
+ ident = self.client.identity
+ headers = {"X-Auth-Token": ident.token,
+ "Content-Type": "text/plain",
+ }
+ obj_paths = ("%s/%s" % (cname, nm) for nm in object_names)
+ body = "\n".join(obj_paths)
+ uri = "/?bulk-delete=1"
+ resp, resp_body = self.client.method_delete(uri, data=body,
+ headers=headers)
+ status = resp_body.get("Response Status", "").split(" ")[0]
+ self.results = resp_body
+ self.completed = True
diff --git a/pyrax/queueing.py b/pyrax/queueing.py
index 48fcb8a8..bd913595 100644
--- a/pyrax/queueing.py
+++ b/pyrax/queueing.py
@@ -21,7 +21,7 @@
import json
import os
import re
-import urlparse
+from six.moves import urllib_parse as urlparse
import pyrax
from pyrax.client import BaseClient
diff --git a/pyrax/resource.py b/pyrax/resource.py
index f1e6edb9..9220ab35 100644
--- a/pyrax/resource.py
+++ b/pyrax/resource.py
@@ -67,9 +67,11 @@ def _add_details(self, info):
Takes the dict returned by the API call and sets the
corresponding attributes on the object.
"""
- for (key, val) in info.iteritems():
+ for (key, val) in six.iteritems(info):
if isinstance(key, six.text_type):
key = key.encode(pyrax.get_encoding())
+ elif isinstance(key, bytes):
+ key = key.decode("utf-8")
setattr(self, key, val)
diff --git a/pyrax/utils.py b/pyrax/utils.py
index 194cb054..88e19c7b 100644
--- a/pyrax/utils.py
+++ b/pyrax/utils.py
@@ -137,6 +137,85 @@ def __getattr__(self, att):
+class ResultsIterator(object):
+ """
+ This object will iterate over all the results for a given type of listing,
+ no matter how many items exist.
+
+ This is an abstract class; subclasses must define the _init_methods()
+ method to specify what manager method should be called to get the next
+ batch of results. Both the equivalent of 'list()' and '_list()' may be
+ specified You may also specify any extra args to be sent when this method
+ is called.
+
+ By default the marker will be unspecified, and the limit will be 1000. You
+ can override either by specifying them during instantiation.
+
+ The 'kwargs' will be converted to attributes. E.g., in this call:
+ rit = ResultsIterator(mgr, foo="bar")
+ will result in the object having a 'foo' attribute with the value of 'bar'.
+ """
+ def __init__(self, manager, marker=None, limit=1000, **kwargs):
+ self.manager = manager
+ self.marker = marker
+ self.limit = limit
+ for att, val in list(kwargs.items()):
+ setattr(self, att, val)
+ self.results = []
+ self.list_method = None
+ self._list_method = None
+ self.marker_att = "id"
+ self.extra_args = tuple()
+ self._init_methods()
+ self.next_uri = ""
+
+
+ def _init_methods(self):
+ """
+ Must be implemented in subclasses. For results that return a URI for
+ the next batch of results, the lower-level '_list_method' will be
+ called, using that URI. Otherwise, the 'list_method' will be called,
+ with the paging info from the prior call.
+
+ If your class uses an attribute other than 'id' as the marker, set this
+ object's 'marker_att' to that attribute.
+ """
+ raise NotImplementedError()
+
+
+ def __iter__(self):
+ return self
+
+
+ def next(self):
+ """
+ Return the next available item. If there are no more items in the
+ local 'results' list, check if there is a 'next_uri' value. If so,
+ use that to get the next page of results from the API, and return
+ the first item from that query.
+ """
+ try:
+ return self.results.pop(0)
+ except IndexError:
+ if self.next_uri is None:
+ raise StopIteration()
+ else:
+ if not self.next_uri:
+ self.results = self.list_method(marker=self.marker,
+ limit=self.limit, prefix=self.prefix)
+ else:
+ args = self.extra_args
+ self.results = self._list_method(self.next_uri, *args)
+ if self.results:
+ last_res = self.results[-1]
+ self.marker = getattr(last_res, self.marker_att)
+ # We should have more results.
+ try:
+ return self.results.pop(0)
+ except IndexError:
+ raise StopIteration()
+
+
def get_checksum(content, encoding="utf8", block_size=8192):
"""
Returns the MD5 checksum in hex for the given content. If 'content'
@@ -187,7 +266,7 @@ def _join_chars(chars, length):
"""
Used by the random character functions.
"""
- mult = (length / len(chars)) + 1
+ mult = int(length / len(chars)) + 1
mult_chars = chars * mult
return "".join(random.sample(mult_chars, length))
@@ -200,7 +279,7 @@ def random_unicode(length=20):
up to code point 1000.
"""
def get_char():
- return unichr(random.randint(32, 1000))
+ return six.unichr(random.randint(32, 1000))
chars = u"".join([get_char() for ii in six.moves.range(length)])
return _join_chars(chars, length)
diff --git a/pyrax/version.py b/pyrax/version.py
index c8f6f45e..ab7d7141 100644
--- a/pyrax/version.py
+++ b/pyrax/version.py
@@ -1,4 +1,4 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-version = "1.8.2"
+version = "1.9.0"
diff --git a/samples/cloud_dns/create_subdomain.py b/samples/cloud_dns/create_subdomain.py
index 2767dfb1..ce457451 100644
--- a/samples/cloud_dns/create_subdomain.py
+++ b/samples/cloud_dns/create_subdomain.py
@@ -33,7 +33,7 @@
domain_name = "abc.example.edu"
try:
dom = dns.find(name=domain_name)
-except exc.DomainCreationFailed as e:
+except exc.NotFound as e:
answer = raw_input("The domain '%s' was not found. Do you want to create "
"it? [y/n]" % domain_name)
if not answer.lower().startswith("y"):
diff --git a/samples/images/import_task.py b/samples/images/import_task.py
index 6c046b2b..894f3fb1 100644
--- a/samples/images/import_task.py
+++ b/samples/images/import_task.py
@@ -59,7 +59,7 @@
except ValueError:
print("'%s' is not a valid number." % snum)
exit()
-if not 0 <= num < len(conts):
+if not 0 <= num < len(objs):
print("'%s' is not a valid object number." % snum)
exit()
obj = objs[num]
diff --git a/setup.py b/setup.py
index 92ebad33..77e4eb56 100755
--- a/setup.py
+++ b/setup.py
@@ -34,14 +34,12 @@
install_requires=[
"python-novaclient>=2.13.0",
"rackspace-novaclient",
- "python-swiftclient>=1.5.0",
"keyring",
"requests>=2.2.1",
"six>=1.5.2",
] + testing_requires,
packages=[
"pyrax",
- "pyrax/cf_wrapper",
"pyrax/identity",
],
)
diff --git a/tests/integrated/smoketest.py b/tests/integrated/smoketest.py
index a8bc8215..488c1a6a 100644
--- a/tests/integrated/smoketest.py
+++ b/tests/integrated/smoketest.py
@@ -3,38 +3,53 @@
from __future__ import print_function
-try:
- import eventlet
- eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
- thread=True)
-except ImportError:
- pass
-
import argparse
+import datetime
+import logging
import os
+import random
import sys
+import threading
import time
import unittest
import pyrax
import pyrax.exceptions as exc
+import pyrax.utils as utils
class SmokeTester(object):
- def __init__(self, region):
+ def __init__(self, context, region, logname=None, nolog=False,
+ clean=False):
+ self.context = context
+ self.region = region
+ self.clean = clean
self.failures = []
self.cleanup_items = []
- self.auth(region)
- self.cs = pyrax.cloudservers
- self.cf = pyrax.cloudfiles
- self.cbs = pyrax.cloud_blockstorage
- self.cdb = pyrax.cloud_databases
- self.clb = pyrax.cloud_loadbalancers
- self.dns = pyrax.cloud_dns
- self.cnw = pyrax.cloud_networks
- self.cmn = pyrax.cloud_monitoring
- self.au = pyrax.autoscale
- self.pq = pyrax.queues
+ self.smoke_server = None
+ self.smoke_volume = None
+ self.smoke_snapshot = None
+ logname = "%s-%s" % (logname or "smoketest", self.region)
+ self.log = logging.getLogger(logname)
+ if nolog:
+ handler = logging.NullHandler()
+ else:
+ handler = logging.FileHandler(filename=logname, mode="w",
+ encoding="utf-8")
+ formatter = logging.Formatter("%(asctime)s - %(message)s")
+ handler.setFormatter(formatter)
+ self.log.addHandler(handler)
+ self.log.setLevel(logging.DEBUG)
+ self.cs = self.context.get_client("cloudservers", self.region)
+ self.cf = self.context.get_client("cloudfiles", self.region)
+ self.cbs = self.context.get_client("cloud_blockstorage", self.region)
+ self.cdb = self.context.get_client("cloud_databases", self.region)
+ self.clb = self.context.get_client("cloud_loadbalancers", self.region)
+ self.dns = self.context.get_client("cloud_dns", self.region)
+ self.cnw = self.context.get_client("cloud_networks", self.region)
+ self.cmn = self.context.get_client("cloud_monitoring", self.region)
+ self.au = self.context.get_client("autoscale", self.region)
+ self.pq = self.context.get_client("queues", self.region)
self.services = ({"service": self.cs, "name": "Cloud Servers"},
{"service": self.cf, "name": "Cloud Files"},
{"service": self.cbs, "name": "Cloud Block Storage"},
@@ -47,30 +62,70 @@ def __init__(self, region):
{"service": self.pq, "name": "Cloud Queues"},
)
- def auth(self, region):
- # Make sure that keyring has been set up with the account credentials.
- print("Authenticating for region '%s'..." % region)
- try:
- pyrax.keyring_auth(region=region)
- print("Success!")
- except Exception as e:
- print("FAIL!", e)
- self.failures.append("AUTHENTICATION")
- print()
+ def logit(self, *args, **kwargs):
+ txtargs = ["%s" % arg for arg in args]
+ msg = " ".join(txtargs)
+ print("%s - %s" % (self.region, msg), **kwargs)
+ self.log.debug(msg)
def check_services(self):
for service in self.services:
- print("SERVICE:", service["name"], end=' ')
+ self.logit("SERVICE:", service["name"], end=' ')
if service["service"]:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("Service=%s" % service["name"])
- print()
+
+ def run_clean(self):
+
+ def cleanup_smoke(svc, list_method=None, *list_params):
+ list_method = list_method or "list"
+ mthd = getattr(svc, list_method)
+ try:
+ svcname = svc.name
+ except AttributeError:
+ svcname = "%s" % svc
+ try:
+ ents = [ent for ent in mthd(*list_params)
+ if ent.name.startswith("SMOKE")]
+ except Exception as e:
+ self.logit("Error listing for service", svcname)
+ self.logit(" Exception:", e)
+ return
+ if ents:
+ try:
+ ent.delete()
+ self.logit("Deleting", svcname, "resource", ent.id)
+ except Exception as e:
+ self.logit("Error deleting", svcname, "resource", ent.id)
+ self.logit(" Exception:", e)
+ else:
+ self.logit("No smoketest resources found in region",
+ self.region, "for service", svcname)
+
+ cleanup_smoke(self.cnw)
+ cleanup_smoke(self.cs)
+ cleanup_smoke(self.cdb)
+ cleanup_smoke(self.cf, "list_container_objects", "SMOKETEST_CONTAINER")
+ cleanup_smoke(self.cf)
+ cleanup_smoke(self.clb)
+ cleanup_smoke(self.dns, "list_records", "SMOKETEST.example.edu")
+ cleanup_smoke(self.dns)
+ cleanup_smoke(self.cmn, "list_checks", "SMOKETEST_entity")
+ cleanup_smoke(self.cmn, "list_entities")
+ cleanup_smoke(self.cmn, "list_notifications")
+ cleanup_smoke(self.cmn, "list_notification_plans")
+ cleanup_smoke(self.cmn, "list_alarms", "SMOKETEST_entity")
+ cleanup_smoke(self.cbs)
+ return
def run_tests(self):
+ if self.clean:
+ return self.run_clean()
+
if self.cs:
- print("Running 'compute' tests...")
+ self.logit("Running 'compute' tests...")
self.cs_list_flavors()
self.cs_list_images()
self.cs_create_server()
@@ -78,25 +133,25 @@ def run_tests(self):
self.cs_list_servers()
if self.cnw:
- print("Running 'network' tests...")
+ self.logit("Running 'network' tests...")
try:
self.cnw_create_network()
self.cnw_list_networks()
except exc.NotFound:
# Networking not supported
- print(" - Networking not supported.")
+ self.logit(" - Networking not supported.")
except exc.NetworkCountExceeded:
- print(" - Too many networks already exist.")
+ self.logit(" - Too many networks already exist.")
if self.cdb:
- print("Running 'database' tests...")
+ self.logit("Running 'database' tests...")
self.cdb_list_flavors()
self.cdb_create_instance()
self.cdb_create_db()
self.cdb_create_user()
if self.cf:
- print("Running 'object_store' tests...")
+ self.logit("Running 'object_store' tests...")
self.cf_create_container()
self.cf_list_containers()
self.cf_make_container_public()
@@ -104,19 +159,19 @@ def run_tests(self):
self.cf_upload_file()
if self.clb:
- print("Running 'load_balancer' tests...")
+ self.logit("Running 'load_balancer' tests...")
self.lb_list()
self.lb_create()
if self.dns:
- print("Running 'DNS' tests...")
+ self.logit("Running 'DNS' tests...")
self.dns_list()
self.dns_create_domain()
self.dns_create_record()
if self.cmn:
if not self.smoke_server:
- print("Server not available; skipping Monitoring tests.")
+ self.logit("Server not available; skipping Monitoring tests.")
return
self.cmn_create_entity()
self.cmn_list_check_types()
@@ -126,283 +181,289 @@ def run_tests(self):
self.cmn_create_notification_plan()
self.cmn_create_alarm()
+ if self.cbs:
+ self.cbs_list_volumes()
+ self.cbs_list_types()
+ self.cbs_list_snapshots()
+ self.cbs_create_volume()
+ self.cbs_attach_to_instance()
+ self.cbs_detach_from_instance()
+ self.cbs_create_snapshot()
+ self.cbs_delete_snapshot()
# Specific tests start here ##
def cs_list_flavors(self):
- print("Listing Flavors:", end=' ')
+ self.logit("Listing Flavors:", end=' ')
self.cs_flavors = self.cs.list_flavors()
if self.cs_flavors:
- print()
+ self.logit()
for flavor in self.cs_flavors:
- print(" -", flavor)
+ self.logit(" -", flavor)
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("FLAVORS")
- print()
+ self.logit()
def cs_list_images(self):
- print("Listing Images:", end=' ')
+ self.logit("Listing Images:", end=' ')
self.cs_images = self.cs.list_base_images()
if self.cs_images:
- print()
for image in self.cs_images:
- print(" -", image)
+ self.logit(" -", image)
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("IMAGES")
- print()
def cnw_create_network(self):
- print("Creating network...")
+ self.logit("Creating network...")
new_network_name = "SMOKETEST_NW"
new_network_cidr = "192.168.0.0/24"
- print("CREATE NETWORK:", end=' ')
+ self.logit("CREATE NETWORK:", end=' ')
+ self.logit("CNW", self.cnw)
self.smoke_network = self.cnw.create(new_network_name,
cidr=new_network_cidr)
self.cleanup_items.append(self.smoke_network)
if self.smoke_network:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("CREATE NETWORK")
- print()
def cnw_list_networks(self):
- print("Listing networks...")
+ self.logit("Listing networks...")
try:
networks = self.cnw.list()
except exc.NotFound:
# Many non-rax system do no support networking.
- print("Networking not available")
+ self.logit("Networking not available")
return
for network in networks:
- print(" - %s: %s (%s)" % (network.id, network.name, network.cidr))
+ self.logit(" - %s: %s (%s)" % (network.id, network.name,
+ network.cidr))
if not networks:
self.failures.append("LIST NETWORKS")
- print()
+
+ def log_wait(self, obj, att="status", desired=None, verbose_atts=None):
+ start = time.time()
+ self.logit("Beginning wait for", obj.name, obj)
+ if not desired:
+ desired = ["ACTIVE", "ERROR"]
+ ret = utils.wait_until(obj, "status", desired=desired, interval=10,
+ verbose=True, verbose_atts="progress")
+ end = time.time()
+ duration = str(datetime.timedelta(seconds=(end - start)))
+ self.logit("Completed wait for", obj.name, obj)
+ self.logit(" It took %s to complete" % duration)
+ return ret
def cs_create_server(self):
- print("Creating server...")
+ self.logit("Creating server...")
img = [img for img in self.cs_images
if "12.04" in img.name][0]
flavor = self.cs_flavors[0]
self.smoke_server = self.cs.servers.create("SMOKETEST_SERVER",
img.id, flavor.id)
self.cleanup_items.append(self.smoke_server)
- self.smoke_server = pyrax.utils.wait_until(self.smoke_server, "status",
- ["ACTIVE", "ERROR"], interval=10, verbose=True,
- verbose_atts="progress")
+ self.smoke_server = self.log_wait(self.smoke_server)
if self.smoke_server.status == "ERROR":
- print("Server creation failed!")
+ self.logit("Server creation failed!")
self.failures.append("SERVER CREATION")
else:
- print("Success!")
- print()
+ self.logit("Success!")
def cs_reboot_server(self):
- print("Rebooting server...")
+ self.logit("Rebooting server...")
self.smoke_server.reboot()
- self.smoke_server = pyrax.utils.wait_until(self.smoke_server, "status",
- ["ACTIVE", "ERROR"], interval=10, verbose=True,
- verbose_atts="progress")
+ self.smoke_server = self.log_wait(self.smoke_server)
if self.smoke_server.status == "ERROR":
- print("Server reboot failed!")
+ self.logit("Server reboot failed!")
self.failures.append("SERVER REBOOT")
else:
- print("Success!")
- print()
+ self.logit("Success!")
def cs_list_servers(self):
- print("Listing servers...")
+ self.logit("Listing servers...")
servers = self.cs.servers.list()
if not servers:
- print("Server listing failed!")
+ self.logit("Server listing failed!")
self.failures.append("SERVER LISTING")
else:
for server in servers:
- print(" -", server.id, server.name)
- print()
+ self.logit(" -", server.id, server.name)
def cdb_list_flavors(self):
- print("Listing Database Flavors:", end=' ')
+ self.logit("Listing Database Flavors:", end=' ')
try:
self.cdb_flavors = self.cdb.list_flavors()
except Exception as e:
+ self.logit("FAIL! List DB Flavors:", e)
self.cdb_flavors = None
if self.cdb_flavors:
- print()
for flavor in self.cdb_flavors:
- print(" -", flavor)
+ self.logit(" -", flavor)
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("DB FLAVORS")
- print()
def cdb_create_instance(self):
if not self.cdb_flavors:
# Skip this test
- print("Skipping database instance creation...")
+ self.logit("Skipping database instance creation...")
self.smoke_instance = None
return
- print("Creating database instance...")
+ self.logit("Creating database instance...")
self.smoke_instance = self.cdb.create("SMOKETEST_DB_INSTANCE",
flavor=self.cdb_flavors[0], volume=1)
self.cleanup_items.append(self.smoke_instance)
- self.smoke_instance = pyrax.utils.wait_until(self.smoke_instance,
- "status", ["ACTIVE", "ERROR"], interval=10, verbose=True,
- verbose_atts="progress")
+ self.smoke_instance = self.log_wait(self.smoke_instance)
if self.smoke_instance.status == "ACTIVE":
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("DB INSTANCE CREATION")
- print()
def cdb_create_db(self):
if not self.smoke_instance:
# Skip this test
- print("Skipping database creation...")
+ self.logit("Skipping database creation...")
return
- print("Creating database...")
+ self.logit("Creating database...")
self.smoke_db = self.smoke_instance.create_database("SMOKETEST_DB")
self.cleanup_items.append(self.smoke_db)
dbs = self.smoke_instance.list_databases()
if self.smoke_db in dbs:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("DB DATABASE CREATION")
- print()
def cdb_create_user(self):
if not self.smoke_instance:
# Skip this test
- print("Skipping database user creation...")
+ self.logit("Skipping database user creation...")
return
- print("Creating database user...")
+ self.logit("Creating database user...")
self.smoke_user = self.smoke_instance.create_user("SMOKETEST_USER",
"SMOKETEST_PW", database_names=[self.smoke_db])
self.cleanup_items.append(self.smoke_user)
users = self.smoke_instance.list_users()
if self.smoke_user in users:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("DB USER CREATION")
- print()
def cf_create_container(self):
- print("Creating a Cloud Files Container...")
+ self.logit("Creating a Cloud Files Container...")
self.smoke_cont = self.cf.create_container("SMOKETEST_CONTAINER")
self.cleanup_items.append(self.smoke_cont)
if self.smoke_cont:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("CONTAINER CREATION")
- print()
def cf_list_containers(self):
- print("Listing the Cloud Files Containers...")
+ self.logit("Listing the Cloud Files Containers...")
conts = self.cf.get_all_containers()
if conts:
for cont in conts:
- print("%s - %s files, %s bytes" % (cont.name,
- cont.object_count, cont.total_bytes))
+ try:
+ nm = cont.name
+ num = cont.object_count
+ size = cont.total_bytes
+ self.logit("%s - %s files, %s bytes" % (nm, num, size))
+ except Exception as e:
+ self.logit("FAIL! Container description", e)
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("CONTAINER LISTING")
- print()
def cf_make_container_public(self):
- print("Publishing the Cloud Files Container to CDN...")
+ self.logit("Publishing the Cloud Files Container to CDN...")
self.smoke_cont.make_public()
uri = self.smoke_cont.cdn_uri
if uri:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("PUBLISHING CDN")
- print()
def cf_make_container_private(self):
- print("Removing the Cloud Files Container from CDN...")
+ self.logit("Removing the Cloud Files Container from CDN...")
try:
self.smoke_cont.make_private()
- print("Success!")
+ self.logit("Success!")
except Exception as e:
- print("FAIL!")
+ self.logit("FAIL!", e)
self.failures.append("UNPUBLISHING CDN")
- print()
def cf_upload_file(self):
- print("Uploading a Cloud Files object...")
+ self.logit("Uploading a Cloud Files object...")
cont = self.smoke_cont
- text = pyrax.utils.random_unicode(1024)
+ text = utils.random_ascii(1024)
obj = cont.store_object("SMOKETEST_OBJECT", text)
# Make sure it is deleted before the container
self.cleanup_items.insert(0, obj)
all_objs = cont.get_object_names()
if obj.name in all_objs:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("UPLOAD FILE")
- print()
def lb_list(self):
- print("Listing Load Balancers...")
+ self.logit("Listing Load Balancers...")
lbs = self.clb.list()
if not lbs:
- print(" - No load balancers to list!")
+ self.logit(" - No load balancers to list!")
else:
for lb in lbs:
- print(" -", lb.name)
+ self.logit(" -", lb.name)
def lb_create(self):
- print("Creating a Load Balancer...")
+ self.logit("Creating a Load Balancer...")
node = self.clb.Node(address="10.177.1.1", port=80, condition="ENABLED")
vip = self.clb.VirtualIP(type="PUBLIC")
lb = self.clb.create("SMOKETEST_LB", port=80, protocol="HTTP",
nodes=[node], virtual_ips=[vip])
self.cleanup_items.append(lb)
- pyrax.utils.wait_until(lb, "status", ["ACTIVE", "ERROR"], interval=10,
- verbose=True)
+ lb = self.log_wait(lb)
if lb:
- print("Success!")
+ self.logit("Success!")
else:
- print("FAIL!")
+ self.logit("FAIL!")
self.failures.append("LOAD_BALANCERS")
def dns_list(self):
- print("Listing DNS Domains...")
+ self.logit("Listing DNS Domains...")
doms = self.dns.list()
if not doms:
- print(" - No domains to list!")
+ self.logit(" - No domains to list!")
else:
for dns in doms:
- print(" -", dns.name)
+ self.logit(" -", dns.name)
def dns_create_domain(self):
- print("Creating a DNS Domain...")
+ self.logit("Creating a DNS Domain...")
domain_name = "SMOKETEST.example.edu"
try:
dom = self.dns.create(name=domain_name,
emailAddress="sample@example.edu", ttl=900,
comment="SMOKETEST sample domain")
- print("Success!")
+ self.logit("Success!")
self.cleanup_items.append(dom)
- except exc.DomainCreationFailed:
- print("FAIL!")
+ except exc.DomainCreationFailed as e:
+ self.logit("FAIL!", e)
self.failures.append("DNS DOMAIN CREATION")
def dns_create_record(self):
- print("Creating a DNS Record...")
+ self.logit("Creating a DNS Record...")
domain_name = "SMOKETEST.example.edu"
try:
dom = self.dns.find(name=domain_name)
except exc.NotFound:
- print("Smoketest domain not found; skipping record test.")
+ self.logit("Smoketest domain not found; skipping record test.")
self.failures.append("DNS RECORD CREATION")
return
a_rec = {"type": "A",
@@ -411,44 +472,41 @@ def dns_create_record(self):
"ttl": 6000}
try:
recs = dom.add_records(a_rec)
- print("Success!")
+ self.logit("Success!")
# No need to cleanup, since domain deletion also deletes the recs.
# self.cleanup_items.extend(recs)
- except exc.DomainRecordAdditionFailed:
- print("FAIL!")
+ except exc.DomainRecordAdditionFailed as e:
+ self.logit("FAIL!", e)
self.failures.append("DNS RECORD CREATION")
def cmn_list_check_types(self):
- print("Listing Monitoring Check Types...")
+ self.logit("Listing Monitoring Check Types...")
cts = self.cmn.list_check_types()
for ct in cts:
- print(" -", ct.id, ct.type)
- print()
+ self.logit(" -", ct.id, ct.type)
def cmn_list_monitoring_zones(self):
- print("Listing Monitoring Zones...")
+ self.logit("Listing Monitoring Zones...")
zones = self.cmn.list_monitoring_zones()
for zone in zones:
- print(" -", zone.id, zone.name)
- print()
+ self.logit(" -", zone.id, zone.name)
def cmn_create_entity(self):
- print("Creating a Monitoring Entity...")
+ self.logit("Creating a Monitoring Entity...")
srv = self.smoke_server
ip = srv.networks["public"][0]
try:
self.smoke_entity = self.cmn.create_entity(name="SMOKETEST_entity",
ip_addresses={"main": ip})
self.cleanup_items.append(self.smoke_entity)
- print("Success!")
- except Exception:
- print("FAIL!")
+ self.logit("Success!")
+ except Exception as e:
+ self.logit("FAIL!", e)
self.smoke_entity = None
self.failures.append("MONITORING CREATE ENTITY")
- print()
def cmn_create_check(self):
- print("Creating a Monitoring Check...")
+ self.logit("Creating a Monitoring Check...")
ent = self.smoke_entity
alias = ent.ip_addresses.keys()[0]
try:
@@ -456,79 +514,202 @@ def cmn_create_check(self):
label="SMOKETEST_check", check_type="remote.ping",
details={"count": 5}, monitoring_zones_poll=["mzdfw"],
period=60, timeout=20, target_alias=alias)
- print("Success!")
+ self.logit("Success!")
self.cleanup_items.append(self.smoke_check)
- except Exception:
- print("FAIL!")
+ except Exception as e:
+ self.logit("FAIL!", e)
self.smoke_check = None
self.failures.append("MONITORING CREATE CHECK")
- print()
def cmn_create_notification(self):
- print("Creating a Monitoring Notification...")
+ self.logit("Creating a Monitoring Notification...")
email = "smoketest@example.com"
try:
self.smoke_notification = self.cmn.create_notification("email",
- label="smoketest", details={"address": email})
- print("Success!")
+ label="SMOKETEST_NOTIFICATION", details={"address": email})
+ self.logit("Success!")
self.cleanup_items.append(self.smoke_notification)
- except Exception:
- print("FAIL!")
+ except Exception as e:
+ self.logit("FAIL!", e)
self.smoke_notification = None
self.failures.append("MONITORING CREATE NOTIFICATION")
- print()
def cmn_create_notification_plan(self):
if not self.smoke_notification:
- print("No monitoring notification found; skipping notification "
- "creation...")
+ self.logit("No monitoring notification found; skipping "
+ "notification creation...")
return
- print("Creating a Monitoring Notification Plan...")
+ self.logit("Creating a Monitoring Notification Plan...")
try:
self.smoke_notification_plan = self.cmn.create_notification_plan(
- label="smoketest plan", ok_state=self.smoke_notification)
- print("Success!")
+ label="SMOKETEST_PLAN", ok_state=self.smoke_notification)
+ self.logit("Success!")
self.cleanup_items.append(self.smoke_notification_plan)
except Exception as e:
- print("FAIL!", e)
+ self.logit("FAIL!", e)
self.smoke_notification_plan = None
self.failures.append("MONITORING CREATE NOTIFICATION PLAN")
- print()
def cmn_create_alarm(self):
if not self.smoke_notification_plan:
- print("No monitoring plan found; skipping alarm creation...")
+ self.logit("No monitoring plan found; skipping alarm creation...")
return
- print("Creating a Monitoring Alarm...")
+ self.logit("Creating a Monitoring Alarm...")
try:
self.smoke_alarm = self.cmn.create_alarm(self.smoke_entity,
self.smoke_check, self.smoke_notification_plan,
- label="smoke alarm")
- print("Success!")
+ label="SMOKETEST_ALARM")
+ self.logit("Success!")
self.cleanup_items.append(self.smoke_alarm)
- except Exception:
- print("FAIL!")
+ except Exception as e:
+ self.logit("FAIL!", e)
self.failures.append("MONITORING CREATE ALARM")
- print()
+
+ def cbs_list_volumes(self):
+ self.logit("Listing Block Storage Volumes...")
+ vols = self.cbs.list()
+ for vol in vols:
+ self.logit(" -", vol.name, "(%s)" % vol.volume_type, "Size:",
+ vol.size)
+
+ def cbs_list_types(self):
+ self.logit("Listing Block Storage Volume Types...")
+ typs = self.cbs.list_types()
+ for typ in typs:
+ self.logit(" -", typ.name)
+
+ def cbs_list_snapshots(self):
+ self.logit("Listing Block Storage Snapshots...")
+ snaps = self.cbs.list_snapshots()
+ for snap in snaps:
+ self.logit(" -", snap.name, "(%s)" % snap.status, "Size:",
+ snap.size)
+
+ def cbs_create_volume(self):
+ self.logit("Creating Volume...")
+ typ = random.choice(self.cbs.list_types())
+ self.smoke_volume = self.cbs.create("SMOKETEST_VOLUME", size=100,
+ volume_type="SATA", description="SMOKETEST_VOLUME_DESCRIPTION")
+ self.cleanup_items.append(self.smoke_volume)
+ self.smoke_volume = self.log_wait(self.smoke_volume,
+ desired=["available", "error"])
+ if self.smoke_volume.status == "ERROR":
+ self.logit("Volume creation failed!")
+ self.failures.append("VOLUME CREATION")
+ else:
+ self.logit("Success!")
+
+ def cbs_attach_to_instance(self):
+ if not self.smoke_server:
+ self.logit("Server not available; skipping volume attach tests.")
+ return
+ self.logit("Attaching Volume to instance...")
+ try:
+ self.smoke_volume.attach_to_instance(self.smoke_server, "/dev/xvdb")
+ except Exception as e:
+ self.logit("FAIL!", e)
+ return
+ self.smoke_volume = self.log_wait(self.smoke_volume,
+ desired=["in-use", "error"])
+ self.logit("Success!")
+
+ def cbs_detach_from_instance(self):
+ if not self.smoke_server:
+ self.logit("Server not available; skipping volume detach tests.")
+ return
+ self.logit("Detaching Volume from instance...")
+ try:
+ self.smoke_volume.detach()
+ except Exception as e:
+ self.logit("FAIL!", e)
+ return
+ self.smoke_volume = self.log_wait(self.smoke_volume,
+ desired=["available", "error"])
+ self.logit("Success!")
+
+ def cbs_create_snapshot(self):
+ if not self.smoke_volume:
+ self.logit("Volume not available; skipping snapshot tests.")
+ return
+ self.logit("Creating Snapshot...")
+ try:
+ self.smoke_snapshot = self.cbs.create_snapshot(self.smoke_volume,
+ name="SMOKETEST_SNAPSHOT")
+ except Exception as e:
+ self.logit("FAIL!", e)
+ return
+ self.smoke_snapshot = self.log_wait(self.smoke_snapshot,
+ desired=["available", "error"])
+ self.logit("Success!")
+
+ def cbs_delete_snapshot(self):
+ if not self.smoke_snapshot:
+ self.logit("Snapshot not available; skipping snapshot deletion.")
+ return
+ self.logit("Deleting Snapshot...")
+ try:
+ self.cbs.delete_snapshot(self.smoke_snapshot)
+ except Exception as e:
+ self.logit("FAIL!", e)
+ return
+ # Need to wait until the snapshot is deleted
+ snap_id = self.smoke_snapshot.id
+ self.logit("Waiting for snapshot deletion...")
+ while True:
+ try:
+ snap = self.cbs.get_snapshot(snap_id)
+ except exc.NotFound:
+ break
+ time.sleep(5)
+ self.logit("Success!")
def cleanup(self):
- print("Cleaning up...")
+ self.logit("Cleaning up...")
for item in self.cleanup_items:
try:
item.delete()
- print(" - Deleting:", end=' ')
+ self.logit(" - Deleting:", end=' ')
try:
- print(item.name)
+ self.logit(item.name)
except AttributeError:
- print(item)
+ self.logit(item)
except exc.NotFound:
# Some items are deleted along with others (e.g., DNS records
# when a domain is deleted), so don't complain.
pass
except Exception as e:
- print("Could not delete '%s': %s" % (item, e))
+ self.logit("Could not delete '%s': %s" % (item, e))
+
+
+class TestThread(threading.Thread):
+ def __init__(self, context, region, logname, nolog, clean):
+ self.context = context
+ self.region = region
+ self.clean = clean
+ self.tester = SmokeTester(context, region, logname, nolog, clean)
+ threading.Thread.__init__(self)
+ def run(self):
+ print()
+ print("=" * 77)
+ if self.clean:
+ print("Starting cleanup for region: %s" % self.region)
+ else:
+ print("Starting test for region: %s" % self.region)
+ print("=" * 77)
+ try:
+ self.tester.run_tests()
+ finally:
+ self.tester.cleanup()
+ print()
+ print("=" * 88)
+ if self.tester.failures:
+ print("The following tests failed:")
+ for failure in self.tester.failures:
+ print(" -", failure)
+ else:
+ print(self.region, "- all tests passed!")
if __name__ == "__main__":
@@ -540,37 +721,45 @@ def cleanup(self):
parser.add_argument("--env", "-e", help="""Configuration environment to
use for the test. If not specified, the `default` environment is
used.""")
+ parser.add_argument("--logname", "-l", help="""Optional prefix name for the
+ log file created for each region in the smoketest.
+ Default = 'smoketest-REGION'. """)
+ parser.add_argument("--no-log", "-n", action="store_true",
+ help="""Turns off logging. No log files will be created if this
+ parameter is set.""")
+ parser.add_argument("--clean", "-c", action="store_true", help="""Don't
+ run the tests; instead, go through the account and delete any
+ resources that begin with 'SMOKE'.""")
args = parser.parse_args()
- regions = args.regions
- if not regions:
- pyrax.keyring_auth()
- regions = pyrax.regions
env = args.env
- if env:
- pyrax.set_environment(env)
+ regions = args.regions
+ logname = args.logname or "smoketest"
+ nolog = args.no_log
+ clean = args.clean
start = time.time()
- pyrax.keyring_auth()
+ context = pyrax.create_context(env=env)
+ print("Authenticating...", end=" ")
+ try:
+ context.keyring_auth()
+ print("Success!")
+ except Exception as e:
+ print("FAIL!", e)
+ exit()
+
+ if not regions:
+ regions = context.regions
+ test_threads = []
for region in regions:
- print()
- print("=" * 77)
- print("Starting test for region: %s" % region)
- print("=" * 77)
- smoke_tester = SmokeTester(region)
try:
- smoke_tester.run_tests()
-
- finally:
- smoke_tester.cleanup()
-
- print()
- print("=" * 88)
- if smoke_tester.failures:
- print("The following tests failed:")
- for failure in smoke_tester.failures:
- print(" -", failure)
- else:
- print("All tests passed!")
+ test = TestThread(context, region, logname, nolog, clean)
+ except exc.NoSuchClient:
+ print("ERROR - no client for region '%s'" % region)
+ continue
+ test_threads.append(test)
+ test.start()
+ for test_thread in test_threads:
+ test_thread.join()
end = time.time()
print()
print("Running the smoketests took %6.1f seconds." % (end - start))
diff --git a/tests/unit/test_autoscale.py b/tests/unit/test_autoscale.py
index 8c32ee86..05969e1f 100644
--- a/tests/unit/test_autoscale.py
+++ b/tests/unit/test_autoscale.py
@@ -501,6 +501,39 @@ def test_mgr_update_launch_config(self):
personality=personality, networks=networks, load_balancers=lbs)
mgr.api.method_put.assert_called_once_with(uri, body=body)
+ def test_mgr_update_launch_config_no_personality(self):
+ sg = self.scaling_group
+ mgr = sg.manager
+ mgr.get = Mock(return_value=sg)
+ typ = utils.random_unicode()
+ lbs = utils.random_unicode()
+ name = utils.random_unicode()
+ flv = utils.random_unicode()
+ img = utils.random_unicode()
+ dconfig = utils.random_unicode()
+ metadata = utils.random_unicode()
+ networks = utils.random_unicode()
+ sg.launchConfiguration = {}
+ body = {"type": "launch_server",
+ "args": {
+ "server": {
+ "name": name,
+ "imageRef": img,
+ "flavorRef": flv,
+ "OS-DCF:diskConfig": dconfig,
+ "networks": networks,
+ "metadata": metadata,
+ },
+ "loadBalancers": lbs,
+ },
+ }
+ mgr.api.method_put = Mock(return_value=(None, None))
+ uri = "/%s/%s/launch" % (mgr.uri_base, sg.id)
+ mgr.update_launch_config(sg.id, server_name=name, flavor=flv, image=img,
+ disk_config=dconfig, metadata=metadata,
+ networks=networks, load_balancers=lbs)
+ mgr.api.method_put.assert_called_once_with(uri, body=body)
+
def test_mgr_update_launch_config_key_name(self):
sg = self.scaling_group
mgr = sg.manager
@@ -1061,7 +1094,7 @@ def test_mgr_create_body(self):
flavor = utils.random_unicode()
disk_config = None
metadata = None
- personality = None
+ personality = [{"path": "/tmp/testing", "contents": "testtest"}]
scaling_policies = None
networks = utils.random_unicode()
lb = fakes.FakeLoadBalancer()
@@ -1086,7 +1119,8 @@ def test_mgr_create_body(self):
"imageRef": image,
"metadata": {},
"name": server_name,
- "personality": [],
+ "personality": [{"path": "/tmp/testing",
+ "contents": "dGVzdHRlc3Q="}],
"networks": networks,
"key_name": key_name}
},
diff --git a/tests/unit/test_cf_client.py b/tests/unit/test_cf_client.py
deleted file mode 100644
index f738ad1f..00000000
--- a/tests/unit/test_cf_client.py
+++ /dev/null
@@ -1,1366 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import locale
-import os
-import random
-import unittest
-import uuid
-
-import six
-
-from mock import ANY, call, patch
-from mock import MagicMock as Mock
-
-import pyrax
-from pyrax.cf_wrapper.client import _swift_client
-from pyrax.cf_wrapper.client import _convert_head_object_last_modified_to_local
-from pyrax.cf_wrapper.client import _convert_list_last_modified_to_local
-from pyrax.cf_wrapper.container import Container
-import pyrax.utils as utils
-import pyrax.exceptions as exc
-
-from pyrax.fakes import fake_attdict
-from pyrax.fakes import FakeBulkDeleter
-from pyrax.fakes import FakeContainer
-from pyrax.fakes import FakeFolderUploader
-from pyrax.fakes import FakeIdentity
-from pyrax.fakes import FakeResponse
-from pyrax.fakes import FakeStorageObject
-
-
-class CF_ClientTest(unittest.TestCase):
- def __init__(self, *args, **kwargs):
- reload(pyrax)
- self.orig_connect_to_cloudservers = pyrax.connect_to_cloudservers
- self.orig_connect_to_cloud_databases = pyrax.connect_to_cloud_databases
- ctclb = pyrax.connect_to_cloud_loadbalancers
- self.orig_connect_to_cloud_loadbalancers = ctclb
- ctcbs = pyrax.connect_to_cloud_blockstorage
- self.orig_connect_to_cloud_blockstorage = ctcbs
- super(CF_ClientTest, self).__init__(*args, **kwargs)
-
- def setUp(self):
- pyrax.connect_to_cloudservers = Mock()
- pyrax.connect_to_cloud_loadbalancers = Mock()
- pyrax.connect_to_cloud_databases = Mock()
- pyrax.connect_to_cloud_blockstorage = Mock()
- pyrax.identity = FakeIdentity()
- pyrax.set_credentials("fakeuser", "fakeapikey", region="FAKE")
- pyrax.connect_to_cloudfiles(region="FAKE")
- self.client = pyrax.cloudfiles
- self.client._container_cache = {}
- self.cont_name = utils.random_ascii()
- self.obj_name = utils.random_ascii()
- self.fake_object = FakeStorageObject(self.client, self.cont_name,
- self.obj_name)
-
- def tearDown(self):
- self.client = None
- pyrax.connect_to_cloudservers = self.orig_connect_to_cloudservers
- pyrax.connect_to_cloud_databases = self.orig_connect_to_cloud_databases
- octclb = self.orig_connect_to_cloud_loadbalancers
- pyrax.connect_to_cloud_loadbalancers = octclb
- octcbs = self.orig_connect_to_cloud_blockstorage
- pyrax.connect_to_cloud_blockstorage = octcbs
-
- def test_account_metadata(self):
- client = self.client
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {"X-Account-Meta-Foo":
- "yes", "Some-Other-Key": "no"}
- meta = client.get_account_metadata()
- self.assert_(len(meta) == 1)
- self.assert_("X-Account-Meta-Foo" in meta)
-
- def test_set_account_metadata(self):
- client = self.client
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "X-Account-Meta-foo": "yes", "some-other-key": "no"}
- client.connection.post_account = Mock()
- client.set_account_metadata({"newkey": "newval"})
- client.connection.post_account.assert_called_with(
- {"X-Account-Meta-newkey": "newval"}, response_dict=None)
-
- def test_set_account_metadata_prefix(self):
- client = self.client
- client.connection.post_account = Mock()
- prefix = utils.random_unicode()
- client.set_account_metadata({"newkey": "newval"}, prefix=prefix)
- client.connection.post_account.assert_called_with(
- {"%snewkey" % prefix: "newval"}, response_dict=None)
-
- def test_set_account_metadata_clear(self):
- client = self.client
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "X-Account-Meta-foo": "yes", "some-other-key": "no"}
- client.connection.post_account = Mock()
- client.set_account_metadata({"newkey": "newval"}, clear=True)
- client.connection.post_account.assert_called_with(
- {"X-Account-Meta-foo": "", "X-Account-Meta-newkey": "newval"},
- response_dict=None)
-
- def test_set_account_metadata_response(self):
- client = self.client
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "X-Account-Meta-foo": "yes", "some-other-key": "no"}
- client.connection.post_account = Mock()
- response = {}
- client.set_account_metadata({"newkey": "newval"}, clear=True,
- extra_info=response)
- client.connection.post_account.assert_called_with(
- {"X-Account-Meta-foo": "", "X-Account-Meta-newkey": "newval"},
- response_dict=response)
-
- def test_set_temp_url_key(self):
- client = self.client
- sav = client.set_account_metadata
- client.set_account_metadata = Mock()
- key = utils.random_unicode()
- exp = {"Temp-Url-Key": key}
- client.set_temp_url_key(key)
- client.set_account_metadata.assert_called_once_with(exp)
- client.set_account_metadata = sav
-
- def test_set_temp_url_key_generated(self):
- client = self.client
- sav = client.set_account_metadata
- client.set_account_metadata = Mock()
- key = utils.random_ascii()
- sav_uu = uuid.uuid4
-
- class FakeUUID(object):
- hex = key
-
- uuid.uuid4 = Mock(return_value=FakeUUID())
- exp = {"Temp-Url-Key": key}
- client.set_temp_url_key()
- client.set_account_metadata.assert_called_once_with(exp)
- client.set_account_metadata = sav
- uuid.uuid4 = sav_uu
-
- def test_get_temp_url_key(self):
- client = self.client
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "x-account-meta-foo": "yes", "some-other-key": "no"}
- meta = client.get_temp_url_key()
- self.assertIsNone(meta)
- nm = utils.random_unicode()
- client.connection.head_account.return_value = {
- "x-account-meta-temp-url-key": nm, "some-other-key": "no"}
- meta = client.get_temp_url_key()
- self.assertEqual(meta, nm)
-
- def test_get_temp_url_key_cached(self):
- client = self.client
- key = utils.random_unicode()
- client._cached_temp_url_key = key
- meta = client.get_temp_url_key()
- self.assertEqual(meta, key)
-
- def test_get_temp_url(self):
- client = self.client
- nm = utils.random_ascii()
- cname = utils.random_ascii()
- oname = utils.random_ascii()
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "x-account-meta-temp-url-key": nm, "some-other-key": "no"}
- ret = client.get_temp_url(cname, oname, seconds=120, method="GET")
- self.assert_(cname in ret)
- self.assert_(oname in ret)
- self.assert_("?temp_url_sig=" in ret)
- self.assert_("&temp_url_expires=" in ret)
-
- def test_get_temp_url_bad_method(self):
- client = self.client
- nm = utils.random_ascii()
- cname = utils.random_ascii()
- oname = utils.random_ascii()
- self.assertRaises(exc.InvalidTemporaryURLMethod, client.get_temp_url,
- cname, oname, seconds=120, method="INVALID")
-
- def test_get_temp_url_windows(self):
- client = self.client
- nm = "%s\\" % utils.random_ascii()
- cname = "\\%s\\" % utils.random_ascii()
- oname = utils.random_ascii()
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "x-account-meta-temp-url-key": nm, "some-other-key": "no"}
- ret = client.get_temp_url(cname, oname, seconds=120, method="GET")
- self.assertFalse("\\" in ret)
-
- def test_get_temp_url_unicode(self):
- client = self.client
- nm = utils.random_unicode()
- cname = utils.random_ascii()
- oname = utils.random_ascii()
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {
- "x-account-meta-temp-url-key": nm, "some-other-key": "no"}
- client.post_account = Mock()
- self.assertRaises(exc.UnicodePathError, client.get_temp_url, cname,
- oname, seconds=120, method="GET")
-
- def test_get_temp_url_missing_key(self):
- client = self.client
- cname = utils.random_ascii()
- oname = utils.random_ascii()
- client.connection.head_account = Mock()
- client.connection.head_account.return_value = {"some-other-key": "no"}
- self.assertRaises(exc.MissingTemporaryURLKey, client.get_temp_url,
- cname, oname, seconds=120, method="GET")
-
- def test_container_metadata(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "X-Container-Meta-Foo": "yes", "Some-Other-Key": "no"}
- meta = client.get_container_metadata(self.cont_name)
- self.assert_(len(meta) == 1)
- self.assert_("X-Container-Meta-Foo" in meta)
-
- def test_object_metadata(self):
- client = self.client
- client.connection.head_object = Mock()
- client.connection.head_object.return_value = {
- "X-Object-Meta-Foo": "yes", "Some-Other-Key": "no"}
- meta = client.get_object_metadata(self.cont_name, self.obj_name)
- self.assert_(len(meta) == 1)
- self.assert_("X-Object-Meta-Foo" in meta)
-
- def test_set_container_metadata(self):
- client = self.client
- client.connection.post_container = Mock()
- client.set_container_metadata(self.cont_name, {"newkey": "newval"})
- client.connection.post_container.assert_called_with(self.cont_name,
- {"X-Container-Meta-newkey": "newval"}, response_dict=None)
-
- def test_set_container_metadata_prefix(self):
- client = self.client
- client.connection.post_container = Mock()
- prefix = utils.random_unicode()
- client.set_container_metadata(self.cont_name, {"newkey": "newval"},
- prefix=prefix)
- client.connection.post_container.assert_called_with(self.cont_name,
- {"%snewkey" % prefix: "newval"}, response_dict=None)
-
- def test_set_container_metadata_clear(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "X-Container-Meta-Foo": "yes", "Some-Other-Key": "no"}
- client.connection.post_container = Mock()
- client.set_container_metadata(self.cont_name, {"newkey": "newval"},
- clear=True)
- client.connection.post_container.assert_called_with(self.cont_name,
- {"X-Container-Meta-Foo": "",
- "X-Container-Meta-newkey": "newval"}, response_dict=None)
-
- def test_set_container_metadata_response(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "X-Container-Meta-Foo": "yes", "Some-Other-Key": "no"}
- client.connection.post_container = Mock()
- response = {}
- client.set_container_metadata(self.cont_name, {"newkey": "newval"},
- clear=True, extra_info=response)
- client.connection.post_container.assert_called_with(self.cont_name,
- {"X-Container-Meta-Foo": "",
- "X-Container-Meta-newkey": "newval"}, response_dict=response)
-
- def test_set_object_metadata(self):
- client = self.client
- client.connection.head_object = Mock()
- client.connection.head_object.return_value = {
- "X-Object-Meta-Foo": "yes", "Some-Other-Key": "no"}
- client.connection.post_object = Mock()
- client.set_object_metadata(self.cont_name, self.obj_name,
- {"newkey": "newval", "emptykey": ""})
- client.connection.post_object.assert_called_with(self.cont_name,
- self.obj_name, {"X-Object-Meta-newkey": "newval",
- "X-Object-Meta-Foo": "yes"}, response_dict=None)
- response = {}
- client.set_object_metadata(self.cont_name, self.obj_name,
- {"newkey": "newval", "emptykey": ""}, extra_info=response)
- client.connection.post_object.assert_called_with(ANY, ANY, ANY,
- response_dict=response)
-
- def test_set_object_metadata_prefix(self):
- client = self.client
- client.connection.head_object = Mock()
- client.connection.head_object.return_value = {
- "x-object-meta-foo": "yes", "some-other-key": "no"}
- client.connection.post_object = Mock()
- prefix = utils.random_unicode()
- client.set_object_metadata(self.cont_name, self.obj_name,
- {"newkey": "newval", "emptykey": ""}, prefix=prefix)
- client.connection.post_object.assert_called_with(self.cont_name,
- self.obj_name, {"%snewkey" % prefix: "newval"},
- response_dict=None)
-
- def test_remove_object_metadata_key(self):
- client = self.client
- client.connection.head_object = Mock()
- client.connection.head_object.return_value = {
- "X-Object-Meta-Foo": "foo", "X-Container-Meta-Bar": "bar"}
- client.connection.post_object = Mock()
- client.remove_object_metadata_key(self.cont_name, self.obj_name, "Bar")
- client.connection.post_object.assert_called_with(self.cont_name,
- self.obj_name, {"X-Object-Meta-Foo": "foo"},
- response_dict=None)
-
- def test_remove_container_metadata_key(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "X-Container-Meta-Foo": "foo", "X-Container-Meta-Bar": "bar"}
- client.connection.post_container = Mock()
- client.remove_container_metadata_key(self.cont_name, "Bar")
- client.connection.post_container.assert_called_with(self.cont_name,
- {"x-container-meta-Bar": ""}, response_dict=None)
-
- def test_massage_metakeys(self):
- prefix = "ABC-"
- orig = {"ABC-yyy": "ok", "zzz": "change"}
- expected = {"ABC-yyy": "ok", "ABC-zzz": "change"}
- fixed = self.client._massage_metakeys(orig, prefix)
- self.assertEqual(fixed, expected)
-
- def test_prefix_read_only(self):
- client = self.client
- val = utils.random_unicode()
-
- def set_prefix(val):
- client.account_meta_prefix = val
-
- self.assertRaises(AttributeError, set_prefix, val)
-
- def test_resolve_name(self):
- class Foo(object):
- name = "BAR"
- client = self.client
- foo = Foo()
- objval = client._resolve_name(foo)
- strval = client._resolve_name(foo.name)
- self.assertEqual(objval, strval)
-
- def test_get_container_cdn_metadata(self):
- client = self.client
- client.connection.cdn_request = Mock()
- client.connection.cdn_connection = "fake"
- resp = FakeResponse()
- resp.headers = [("a", "b"), ("c", "d")]
- client.connection.cdn_request.return_value = resp
- returned = client.get_container_cdn_metadata(self.cont_name)
- expected = {"a": "b", "c": "d"}
- self.assertEqual(expected, returned)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_set_container_cdn_metadata(self):
- client = self.client
- client.connection.put_container = Mock()
- client.connection.head_container = Mock()
- client.connection.cdn_connection = "fake"
- meta = {"X-TTL": "9999", "X-NotAllowed": "0"}
- self.assertRaises(exc.InvalidCDNMetadata,
- client.set_container_cdn_metadata, self.cont_name, meta)
- meta = {"X-TTL": "9999"}
- client.connection.cdn_request = Mock()
- client.set_container_cdn_metadata(self.cont_name, meta)
- client.connection.cdn_request.assert_called_with("POST",
- [self.cont_name], hdrs=meta)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_create_container(self):
- client = self.client
- client.connection.put_container = Mock()
- client.connection.head_container = Mock()
- ret = client.create_container(self.cont_name)
- self.assert_(isinstance(ret, FakeContainer))
- self.assertEqual(ret.name, self.cont_name)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_create_container_response(self):
- client = self.client
- client.connection.put_container = Mock()
- client.connection.head_container = Mock()
- response = {}
- ret = client.create_container(self.cont_name, extra_info=response)
- client.connection.put_container.assert_called_with(self.cont_name,
- response_dict=response)
-
- def test_delete_container(self):
- client = self.client
- client.connection.delete_container = Mock()
- client.get_container_object_names = Mock()
- onames = ["o1", "o2", "o3"]
- client.get_container_object_names.return_value = onames
- client.delete_object = Mock()
- client.bulk_delete = Mock()
- client.delete_container(self.cont_name)
- self.assertEqual(client.get_container_object_names.call_count, 0)
- client.connection.delete_container.assert_called_with(self.cont_name,
- response_dict=None)
- # Now call with del_objects=True
- client.delete_container(self.cont_name, del_objects=True)
- self.assertEqual(client.get_container_object_names.call_count, 1)
- client.bulk_delete.assert_called_once_with(self.cont_name, onames,
- async=False)
- client.connection.delete_container.assert_called_with(self.cont_name,
- response_dict=None)
- response = {}
- # Now call with extra_info
- client.delete_container(self.cont_name, True, response)
- client.connection.delete_container.assert_called_with(self.cont_name,
- response_dict=response)
-
- def test_remove_object_from_cache(self):
- client = self.client
- client.connection.head_container = Mock()
- nm = utils.random_unicode()
- client._container_cache = {nm: object()}
- client.remove_container_from_cache(nm)
- self.assertEqual(client._container_cache, {})
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_delete_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.delete_object = Mock()
- client.delete_object(self.cont_name, self.obj_name)
- client.connection.delete_object.assert_called_with(self.cont_name,
- self.obj_name, response_dict=None)
- response = {}
- client.delete_object(self.cont_name, self.obj_name, extra_info=response)
- client.connection.delete_object.assert_called_with(ANY, ANY,
- response_dict=response)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_purge_cdn_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.cdn_connection = "fake"
- self.assertRaises(exc.NotCDNEnabled, client.purge_cdn_object,
- self.cont_name, self.obj_name)
- client.get_container(self.cont_name).cdn_uri = "http://example.com"
- client.connection.cdn_request = Mock()
- emls = ["foo@example.com", "bar@example.com"]
- client.purge_cdn_object(self.cont_name, self.obj_name, emls)
- client.connection.cdn_request.assert_called_with("DELETE",
- [self.cont_name, self.obj_name],
- hdrs={"X-Purge-Email": "foo@example.com, bar@example.com"})
-
- @patch('pyrax.cf_wrapper.client.BulkDeleter', new=FakeBulkDeleter)
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_bulk_delete(self):
- client = self.client
- sav = client.bulk_delete_interval
- client.bulk_delete_interval = 0.001
- container = self.cont_name
- obj_names = [utils.random_unicode()]
- ret = client.bulk_delete(container, obj_names, async=False)
- self.assertTrue(isinstance(ret, dict))
- client.bulk_delete_interval = sav
-
- @patch('pyrax.cf_wrapper.client.BulkDeleter', new=FakeBulkDeleter)
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_bulk_delete_async(self):
- client = self.client
- container = self.cont_name
- obj_names = [utils.random_unicode()]
- ret = client.bulk_delete(container, obj_names, async=True)
- self.assertTrue(isinstance(ret, FakeBulkDeleter))
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_object = Mock(return_value=fake_attdict)
- cont = client.get_container(self.cont_name)
- cont.client.connection.get_container = Mock()
- cont.client.connection.get_container.return_value = ({},
- [{"name": "o1"}, {"name": "o2"}])
- obj = client.get_object(self.cont_name, "o1")
- self.assertEqual(obj.name, "o1")
-
- def random_non_us_locale(self):
- nonUS_locales = ("de_DE", "fr_FR", "hu_HU", "ja_JP", "nl_NL", "pl_PL",
- "pt_BR", "pt_PT", "ro_RO", "ru_RU", "zh_CN", "zh_HK",
- "zh_TW")
- return random.choice(nonUS_locales)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object_locale(self):
- client = self.client
- orig_locale = locale.getlocale(locale.LC_TIME)
- new_locale = self.random_non_us_locale()
- try:
- locale.setlocale(locale.LC_TIME, new_locale)
- except Exception:
- # Travis CI seems to have a problem with setting locale, so
- # just skip this.
- self.skipTest("Could not set locale to %s" % new_locale)
- client.connection.head_container = Mock()
- client.connection.head_object = Mock(return_value=fake_attdict)
- obj = client.get_object(self.cont_name, "fake")
- self.assertEqual(obj.last_modified, "2013-01-01T01:02:03")
- locale.setlocale(locale.LC_TIME, orig_locale)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_store_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.put_object = Mock()
- gobj = client.get_object
- client.get_object = Mock(return_value=self.fake_object)
- content = u"something with ü†ƒ-8"
- etag = utils.get_checksum(content)
- obj = client.store_object(self.cont_name, self.obj_name, content,
- content_type="test/test", etag=etag,
- content_encoding="gzip")
- self.assertEqual(client.connection.put_object.call_count, 1)
- # Add extra_info
- response = {}
- obj = client.store_object(self.cont_name, self.obj_name, content,
- content_type="test/test", etag=etag,
- content_encoding="gzip", extra_info=response)
- client.connection.put_object.assert_called_with(ANY, ANY,
- contents=ANY, content_type=ANY, chunk_size=ANY, etag=ANY,
- headers=ANY, response_dict=response)
-
- client.get_object = gobj
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_file(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.put_object = Mock()
- gobj = client.get_object
- client.get_object = Mock(return_value=self.fake_object)
- cont = client.get_container(self.cont_name)
- with utils.SelfDeletingTempfile() as tmpname:
- small_file_contents = "Test Value " * 25
- client.max_file_size = len(small_file_contents) + 1
- with open(tmpname, "wb") as tmp:
- tmp.write(small_file_contents)
- fname = os.path.basename(tmpname)
- fake_type = "test/test"
- client.upload_file(cont, tmpname, content_type=fake_type)
- self.assertEqual(client.connection.put_object.call_count, 1)
- client.get_object = gobj
-
-
- def test_upload_large_file(self):
- def call_upload_file(client, cont, tmpname, content_type_type):
- client.upload_file(cont, tmpname, content_type=content_type_type)
-
- self._test_upload_large_file(call_upload_file)
-
- def test_upload_large_file_from_file_object(self):
- def call_upload_file(client, cont, tmpname, content_type_type):
- with open(tmpname, "rb") as tmp:
- client.upload_file(cont, tmp, content_type=content_type_type)
-
- self._test_upload_large_file(call_upload_file)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def _test_upload_large_file(self, call_upload_file):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.put_object = Mock()
- cont = client.get_container(self.cont_name)
- gobj = client.get_object
- client.get_object = Mock(return_value=self.fake_object)
- with utils.SelfDeletingTempfile() as tmpname:
- small_file_contents = "Test Value " * 25
- client.max_file_size = len(small_file_contents) - 1
- with open(tmpname, "wb") as tmp:
- tmp.write(small_file_contents)
- fname = os.path.basename(tmpname)
- fake_type = "test/test"
- call_upload_file(client, cont, tmpname, fake_type)
- # Large files require 1 call for manifest, plus one for each
- # segment. This should be a 2-segment file upload.
- self.assertEqual(client.connection.put_object.call_count, 3)
- put_calls = client.connection.put_object.mock_calls
- self.assertEqual(put_calls[0][1][1], '%s.1' % fname)
- self.assertEqual(put_calls[1][1][1], '%s.2' % fname)
- self.assertEqual(put_calls[2][1][1], fname)
-
- # get_object() should be called with the same name that was passed
- # to the final put_object() call (to get the object to return)
- client.get_object.assert_called_once_with(cont, fname)
- client.get_object = gobj
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_large_file_from_file_object_with_obj_name(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.put_object = Mock()
- cont = client.get_container(self.cont_name)
- gobj = client.get_object
- client.get_object = Mock(return_value=self.fake_object)
- with utils.SelfDeletingTempfile() as tmpname:
- small_file_contents = "Test Value " * 25
- client.max_file_size = len(small_file_contents) - 1
- with open(tmpname, "wb") as tmp:
- tmp.write(small_file_contents)
- fname = os.path.basename(tmpname)
- fake_type = "test/test"
- obj_name = 'not the same as filename'
- with open(tmpname, "rb") as tmp:
- client.upload_file(cont, tmp,
- obj_name=obj_name, content_type=fake_type)
- # Large files require 1 call for manifest, plus one for each
- # segment. This should be a 2-segment file upload.
- self.assertEqual(client.connection.put_object.call_count, 3)
- put_calls = client.connection.put_object.mock_calls
- self.assertEqual(put_calls[0][1][1], '%s.1' % obj_name)
- self.assertEqual(put_calls[1][1][1], '%s.2' % obj_name)
- self.assertEqual(put_calls[2][1][1], obj_name)
- self.assertEqual(put_calls[2][2]["headers"]["X-Object-Manifest"],
- self.cont_name + "/" + obj_name + ".")
-
- # get_object() should be called with the same name that was passed
- # to the final put_object() call (to get the object to return)
- client.get_object.assert_called_once_with(cont, obj_name)
- client.get_object = gobj
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_folder_bad_folder(self):
- self.assertRaises(exc.FolderNotFound, self.client.upload_folder,
- "/doesnt_exist")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_folder_ignore_patterns(self):
- client = self.client
- bg = client._upload_folder_in_background
- client._upload_folder_in_background = Mock()
- opi = os.path.isdir
- os.path.isdir = Mock(return_value=True)
- test_folder = "testfolder"
- # Test string and list of ignores
- pat1 = "*.foo"
- pat2 = "*.bar"
- upload_key, total_bytes = client.upload_folder(test_folder,
- ignore=pat1)
- client._upload_folder_in_background.assert_called_with(test_folder,
- None, [pat1], upload_key, None)
- upload_key, total_bytes = client.upload_folder(test_folder,
- ignore=[pat1, pat2])
- client._upload_folder_in_background.assert_called_with(test_folder,
- None, [pat1, pat2], upload_key, None)
- client._upload_folder_in_background = bg
- os.path.isdir = opi
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_folder_initial_progress(self):
- client = self.client
- bg = client._upload_folder_in_background
- client._upload_folder_in_background = Mock()
- opi = os.path.isdir
- os.path.isdir = Mock(return_value=True)
- ufs = utils.folder_size
- fake_size = 1234
- utils.folder_size = Mock(return_value=fake_size)
- test_folder = "testfolder"
- key, total_bytes = client.upload_folder(test_folder)
- self.assertEqual(total_bytes, fake_size)
- client._upload_folder_in_background = bg
- utils.folder_size = ufs
- os.path.isdir = opi
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- @patch('pyrax.cf_wrapper.client.FolderUploader', new=FakeFolderUploader)
- def test_upload_folder_in_backgroud(self):
- client = self.client
- start = FakeFolderUploader.start
- FakeFolderUploader.start = Mock()
- client.connection.put_container = Mock()
- client.connection.head_container = Mock()
- fake_upload_key = "abcd"
- client._upload_folder_in_background("folder/path", "cont_name", [],
- fake_upload_key)
- FakeFolderUploader.start.assert_called_with()
- FakeFolderUploader.start = start
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_folder_name_from_path(self):
- self.client.connection.put_container = Mock()
- self.client.connection.head_container = Mock()
- fake_upload_key = "abcd"
- uploader = FakeFolderUploader("root", "cont", None, fake_upload_key,
- self.client)
- path1 = "/foo/bar/baz"
- path2 = "/foo/bar/baz"
- nm1 = uploader.folder_name_from_path(path1)
- nm2 = uploader.folder_name_from_path(path2)
- self.assertEqual(nm1, "baz")
- self.assertEqual(nm2, "baz")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_uploader_bad_dirname(self):
- self.client.connection.put_container = Mock()
- self.client.connection.head_container = Mock()
- fake_upload_key = "abcd"
- uploader = FakeFolderUploader("root", "cont", "*.bad", fake_upload_key,
- self.client)
- ret = uploader.upload_files_in_folder(None, "folder.bad", ["a", "b"])
- self.assertFalse(ret)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_folder_with_files(self):
- client = self.client
- up = client.upload_file
- client.upload_file = Mock()
- client.connection.head_container = Mock()
- client.connection.put_container = Mock()
- cont_name = utils.random_unicode()
- cont = client.create_container(cont_name)
- gobj = client.get_object
- client.get_object = Mock(return_value=self.fake_object)
- safu = client._should_abort_folder_upload
- client._should_abort_folder_upload = Mock(return_value=False)
- upprog = client._update_progress
- client._update_progress = Mock()
- num_files = 10
- fake_upload_key = "abcd"
- with utils.SelfDeletingTempDirectory() as tmpdir:
- for idx in six.moves.range(num_files):
- nm = "file%s" % idx
- pth = os.path.join(tmpdir, nm)
- open(pth, "w").write("test")
- uploader = FakeFolderUploader(tmpdir, cont, "", fake_upload_key,
- client)
- # Note that the fake moved the actual run() code to a
- # different method
- uploader.actual_run()
- self.assertEqual(client.upload_file.call_count, num_files)
- client.get_object = gobj
- client.upload_file = up
- client._should_abort_folder_upload = safu
- client._update_progress = upprog
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_valid_upload_key(self):
- clt = self.client
- clt.folder_upload_status = {"good": {"uploaded": 0}}
- self.assertIsNone(clt._update_progress("good", 1))
- self.assertRaises(exc.InvalidUploadID, clt._update_progress, "bad", 1)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_sync_folder_to_container(self):
- clt = self.client
- up = clt.upload_file
- clt.upload_file = Mock()
- clt.connection.head_container = Mock()
- clt.connection.put_container = Mock()
- clt.connection.head_object = Mock(return_value=fake_attdict)
- clt.get_container_objects = Mock(return_value=[])
- cont_name = utils.random_unicode(8)
- cont = clt.create_container(cont_name)
- num_files = 7
- with utils.SelfDeletingTempDirectory() as tmpdir:
- for idx in six.moves.range(num_files):
- nm = "file%s" % idx
- pth = os.path.join(tmpdir, nm)
- open(pth, "w").write("test")
- clt.sync_folder_to_container(tmpdir, cont)
- self.assertEqual(clt.upload_file.call_count, num_files)
- clt.upload_file = up
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_sync_folder_to_container_hidden(self):
- clt = self.client
- up = clt.upload_file
- clt.upload_file = Mock()
- clt.connection.head_container = Mock()
- clt.connection.put_container = Mock()
- clt.connection.head_object = Mock(return_value=fake_attdict)
- clt.get_container_objects = Mock(return_value=[])
- cont_name = utils.random_unicode(8)
- cont = clt.create_container(cont_name)
- num_vis_files = 4
- num_hid_files = 4
- num_all_files = num_vis_files + num_hid_files
- with utils.SelfDeletingTempDirectory() as tmpdir:
- for idx in six.moves.range(num_vis_files):
- nm = "file%s" % idx
- pth = os.path.join(tmpdir, nm)
- open(pth, "w").write("test")
- for idx in six.moves.range(num_hid_files):
- nm = ".file%s" % idx
- pth = os.path.join(tmpdir, nm)
- open(pth, "w").write("test")
- clt.sync_folder_to_container(tmpdir, cont, include_hidden=True)
- self.assertEqual(clt.upload_file.call_count, num_all_files)
- clt.upload_file = up
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_sync_folder_to_container_nested(self):
- clt = self.client
- up = clt.upload_file
- clt.upload_file = Mock()
- clt.connection.head_container = Mock()
- clt.connection.put_container = Mock()
- clt.connection.head_object = Mock(return_value=fake_attdict)
- clt.get_container_objects = Mock(return_value=[])
- cont_name = utils.random_unicode(8)
- cont = clt.create_container(cont_name)
- num_files = 3
- num_nested_files = 6
- num_all_files = num_files + num_nested_files
- with utils.SelfDeletingTempDirectory() as tmpdir:
- for idx in six.moves.range(num_files):
- nm = "file%s" % idx
- pth = os.path.join(tmpdir, nm)
- open(pth, "w").write("test")
- nested_folder = os.path.join(tmpdir, "nested")
- os.mkdir(nested_folder)
- for idx in six.moves.range(num_nested_files):
- nm = "file%s" % idx
- pth = os.path.join(nested_folder, nm)
- open(pth, "w").write("test")
- clt.sync_folder_to_container(tmpdir, cont)
- self.assertEqual(clt.upload_file.call_count, num_all_files)
- clt.upload_file = up
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_delete_objects_not_in_list(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.get_container = Mock()
- cont = client.get_container(self.cont_name)
- cont.get_object_names = Mock(return_value=["First", "Second"])
- good_names = ["First", "Third"]
- client._local_files = good_names
- client.bulk_delete = Mock()
- client._delete_objects_not_in_list(cont)
- client.bulk_delete.assert_called_with(cont, ["Second"], async=True)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_copy_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_object = Mock(return_value=fake_attdict)
- cont = client.get_container(self.cont_name)
- client.connection.put_object = Mock()
- cont.client.connection.get_container = Mock()
- cont.client.connection.get_container.return_value = ({},
- [{"name": "o1"}, {"name": "o2"}])
- client.copy_object(self.cont_name, "o1", "newcont")
- client.connection.put_object.assert_called_with("newcont", "o1",
- contents=None, headers={"X-Copy-From": "/%s/o1" %
- self.cont_name}, response_dict=None)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_move_object(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_object = Mock(return_value=fake_attdict)
- cont = client.get_container(self.cont_name)
- client.connection.put_object = Mock(return_value="0000")
- cont.client.connection.get_container = Mock()
- cont.client.connection.get_container.return_value = ({},
- [{"name": "o1"}, {"name": "o2"}])
- client.delete_object = Mock()
- client.move_object(self.cont_name, "o1", "newcont")
- client.connection.put_object.assert_called_with("newcont", "o1",
- contents=None, headers={"X-Copy-From": "/%s/o1" %
- self.cont_name}, response_dict=None)
- client.delete_object.assert_called_with(self.cont_name, "o1")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_change_object_content_type(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_object = Mock(return_value=fake_attdict)
- cont = client.get_container(self.cont_name)
- client.connection.put_object = Mock(return_value="0000")
- cont.client.connection.get_container = Mock()
- cont.client.connection.get_container.return_value = ({},
- [{"name": "o1"}, {"name": "o2"}])
- client.change_object_content_type(self.cont_name, "o1",
- "something/else")
- client.connection.put_object.assert_called_with(self.cont_name, "o1",
- contents=None, headers={"X-Copy-From": "/%s/o1" %
- self.cont_name}, content_type="something/else",
- response_dict=None)
-
- def test_fetch_object(self):
- client = self.client
- text = "file_contents"
- client.connection.get_object = Mock(return_value=({}, text))
- resp = client.fetch_object(self.cont_name, self.obj_name,
- include_meta=True)
- self.assertEqual(len(resp), 2)
- self.assertEqual(resp[1], text)
-
- # Try with extra_info dict
- patch("client._resolve_name", lambda arg: arg)
- response = {}
- resp = client.fetch_object(self.cont_name, self.obj_name,
- include_meta=True, extra_info=response)
- client.connection.get_object.assert_called_with(ANY, ANY,
- resp_chunk_size=ANY, response_dict=response)
-
- def test_fetch_partial(self):
- client = self.client
- cont = utils.random_unicode()
- obj = utils.random_unicode()
- size = random.randint(1, 1000)
- client.fetch_object = Mock()
- client.fetch_partial(cont, obj, size)
- client.fetch_object.assert_called_once_with(cont, obj, chunk_size=size)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_download_object(self):
- client = self.client
- sav_fetch = client.fetch_object
- client.fetch_object = Mock(return_value=utils.random_ascii())
- sav_isdir = os.path.isdir
- os.path.isdir = Mock(return_value=True)
- nm = "one/two/three/four.txt"
- with utils.SelfDeletingTempDirectory() as tmpdir:
- fullpath = os.path.join(tmpdir, nm)
- client.download_object("fake", nm, tmpdir, structure=True)
- self.assertTrue(os.path.exists(fullpath))
- with utils.SelfDeletingTempDirectory() as tmpdir:
- fullpath = os.path.join(tmpdir, os.path.basename(nm))
- client.download_object("fake", nm, tmpdir, structure=False)
- self.assertTrue(os.path.exists(fullpath))
- client.fetch_object = sav_fetch
- os.path.isdir = sav_isdir
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_all_containers(self):
- client = self.client
- client.connection.head_container = Mock()
- cont_list = [{"name": self.cont_name, "count": "2", "bytes": "12345"},
- {"name": "anothercont", "count": "1", "bytes": "67890"}]
- client.connection.get_container = Mock()
- client.connection.get_container.return_value = ({}, cont_list)
- conts = client.get_all_containers()
- client.connection.get_container.assert_called_with("", limit=None,
- marker=None)
- self.assertEqual(len(conts), 2)
- cont_names = [ct.name for ct in conts]
- cont_names.sort()
- expected_names = [self.cont_name, "anothercont"]
- expected_names.sort()
- self.assertEqual(cont_names, expected_names)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "x-container-object-count": 3, "x-container-bytes-used": 1234}
- self.assertRaises(exc.MissingName, client.get_container, "")
- cont = client.get_container(self.cont_name)
- self.assertEqual(cont.name, self.cont_name)
- self.assertEqual(cont.object_count, 3)
- self.assertEqual(cont.total_bytes, 1234)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_from_cache(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "x-container-object-count": 3, "x-container-bytes-used": 1234}
- cnt = random.randint(2, 6)
- for ii in range(cnt):
- cont = client.get_container(self.cont_name)
- self.assertEqual(client.connection.head_container.call_count, 1)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_no_cache(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.head_container.return_value = {
- "x-container-object-count": 3, "x-container-bytes-used": 1234}
- cnt = random.randint(2, 6)
- for ii in range(cnt):
- cont = client.get_container(self.cont_name, cached=False)
- self.assertEqual(client.connection.head_container.call_count, cnt)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_objects(self):
- client = self.client
- client.connection.head_container = Mock()
- dct = [{"name": "o1", "bytes": 111}, {"name": "o2", "bytes": 2222}]
- client.connection.get_container = Mock(return_value=({}, dct))
- objs = client.get_container_objects(self.cont_name)
- self.assertEqual(len(objs), 2)
- self.assertEqual(objs[0].container.name, self.cont_name)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_objects_last_modified(self):
- client = self.client
- client.connection.head_container = Mock()
- dct = [
- {
- "name": "o1",
- "bytes": 111,
- "last_modified": "2013-01-01T01:02:03.123456",
- },
- {
- "name": "o2",
- "bytes": 2222,
- "last_modified": "2013-10-21T01:02:03.123456",
- },
- ]
- client.connection.get_container = Mock(return_value=({}, dct))
- objs = client.get_container_objects(self.cont_name)
- self.assertEqual(len(objs), 2)
- self.assertEqual(objs[0].container.name, self.cont_name)
- self.assertEqual(objs[0].name, "o1")
- self.assertEqual(objs[0].last_modified, "2013-01-01T01:02:04")
- self.assertEqual(objs[1].name, "o2")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_object_names(self):
- client = self.client
- client.connection.head_container = Mock()
- dct = [{"name": "o1", "bytes": 111}, {"name": "o2", "bytes": 2222}]
- client.connection.get_container = Mock(return_value=({}, dct))
- obj_names = client.get_container_object_names(self.cont_name)
- self.assertEqual(len(obj_names), 2)
- self.assert_("o1" in obj_names)
- self.assert_("o2" in obj_names)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_list_container_subdirs(self):
- client = self.client
- client.connection.head_container = Mock()
- sd1 = utils.random_unicode()
- sd2 = utils.random_unicode()
- objs = [{"subdir": sd1},
- {"name": "file1", "content_type": "text/plain"},
- {"subdir": sd2},
- {"name": "file2", "content_type": "text/plain"}]
- client.connection.get_container = Mock(return_value=(None, objs))
- ret = client.list_container_subdirs("fake")
- self.assertEqual(len(ret), 2)
- obj_names = [obj.name for obj in ret]
- self.assert_(sd1 in obj_names)
- self.assert_(sd2 in obj_names)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_info(self):
- client = self.client
- dct = {"x-account-container-count": 2, "x-account-bytes-used": 1234}
- client.connection.head_container = Mock(return_value=dct)
- resp = client.get_info()
- self.assertEqual(len(resp), 2)
- self.assertEqual(resp[0], 2)
- self.assertEqual(resp[1], 1234)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_streaming_uri(self):
- client = self.client
- client.connection.head_container = Mock()
- example_uri = "http://example.com"
- client.get_container(self.cont_name).cdn_streaming_uri = example_uri
- uri = client.get_container_streaming_uri(self.cont_name)
- self.assertEqual(uri, example_uri)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_container_ios_uri(self):
- client = self.client
- client.connection.head_container = Mock()
- example_uri = "http://example.com"
- client.get_container(self.cont_name).cdn_ios_uri = example_uri
- uri = client.get_container_ios_uri(self.cont_name)
- self.assertEqual(uri, example_uri)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_list(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.get_container = Mock()
- cont_list = [{"name": self.cont_name, "count": "2", "bytes": "12345"},
- {"name": "anothercont", "count": "1", "bytes": "67890"}]
- client.connection.get_container = Mock()
- client.connection.get_container.return_value = ({}, cont_list)
- resp = client.list()
- self.assertEqual(len(resp), 2)
- self.assert_(all([isinstance(cont, Container) for cont in resp]))
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_list_containers(self):
- client = self.client
- client.connection.get_container = Mock()
- cont_list = [{"name": self.cont_name, "count": "2", "bytes": "12345"},
- {"name": "anothercont", "count": "1", "bytes": "67890"}]
- client.connection.get_container = Mock()
- client.connection.get_container.return_value = ({}, cont_list)
- resp = client.list_containers()
- self.assertEqual(len(resp), 2)
- self.assert_(self.cont_name in resp)
- self.assert_("anothercont" in resp)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_list_containers_info(self):
- client = self.client
- client.connection.get_container = Mock()
- cont_list = [{"name": self.cont_name, "count": "2", "bytes": "12345"},
- {"name": "anothercont", "count": "1", "bytes": "67890"}]
- client.connection.get_container = Mock()
- client.connection.get_container.return_value = ({}, cont_list)
- resp = client.list_containers_info()
- self.assertEqual(len(resp), 2)
- r0 = resp[0]
- self.assert_(isinstance(r0, dict))
- self.assertEqual(len(r0), 3)
- self.assert_("name" in r0)
- self.assert_("count" in r0)
- self.assert_("bytes" in r0)
-
- def test_list_public_containers(self):
- client = self.client
- client.connection.cdn_request = Mock()
- client.connection.cdn_connection = "fake"
- resp = FakeResponse()
- resp.headers = [("a", "b"), ("c", "d")]
- resp.status = 500
- client.connection.cdn_request.return_value = resp
- self.assertRaises(exc.CDNFailed, client.list_public_containers)
- resp.status = 200
- conts = client.list_public_containers()
- client.connection.cdn_request.assert_called_with("GET", [""])
- self.assertEqual(len(conts), 2)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_make_container_public(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.cdn_connection = "fake"
- cont = client.get_container(self.cont_name)
- cont.cdn_uri = None
- client.connection.cdn_request = Mock()
- example = "http://example.com"
- resp = FakeResponse()
- resp.headers = [("x-cdn-uri", example), ("c", "d")]
- resp.status = 500
- client.connection.cdn_request.return_value = resp
- self.assertRaises(exc.CDNFailed, client.make_container_public,
- self.cont_name)
- resp.status = 204
- client.make_container_public(self.cont_name, ttl=6666)
- client.connection.cdn_request.assert_called_with("PUT",
- [self.cont_name], hdrs={"X-TTL": "6666",
- "X-CDN-Enabled": "True"})
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_make_container_private(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.cdn_connection = "fake"
- cont = client.get_container(self.cont_name)
- cont.cdn_uri = None
- client.connection.cdn_request = Mock()
- example = "http://example.com"
- resp = FakeResponse()
- resp.headers = [("x-cdn-uri", example), ("c", "d")]
- resp.status = 500
- client.connection.cdn_request.return_value = resp
- self.assertRaises(exc.CDNFailed, client.make_container_public,
- self.cont_name)
- resp.status = 204
- client.make_container_private(self.cont_name)
- client.connection.cdn_request.assert_called_with("PUT",
- [self.cont_name], hdrs={"X-CDN-Enabled": "False"})
-
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_set_cdn_log_retention(self):
- client = self.client
- client.connection.head_container = Mock()
- client.connection.cdn_connection = "fake"
- cont = client.get_container(self.cont_name)
- client.connection.cdn_request = Mock()
- resp = FakeResponse()
- client.connection.cdn_request.return_value = resp
- resp.status = 500
- self.assertRaises(exc.CDNFailed, client.set_cdn_log_retention, cont,
- True)
- resp.status = 204
- client.set_cdn_log_retention(cont, True)
- self.assert_(cont.cdn_log_retention)
- client.set_cdn_log_retention(cont, False)
- self.assertFalse(cont.cdn_log_retention)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_set_container_web_index_page(self):
- client = self.client
- client.connection.head_container = Mock()
- cont = client.get_container(self.cont_name)
- client.connection.post_container = Mock()
- pg = "index.html"
- client.set_container_web_index_page(cont, pg)
- client.connection.post_container.assert_called_with(self.cont_name,
- {"X-Container-Meta-Web-Index": pg}, response_dict=None)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_set_container_web_error_page(self):
- client = self.client
- client.connection.head_container = Mock()
- cont = client.get_container(self.cont_name)
- client.connection.post_container = Mock()
- pg = "error.html"
- client.set_container_web_error_page(cont, pg)
- client.connection.post_container.assert_called_with(self.cont_name,
- {"X-Container-Meta-Web-Error": pg}, response_dict=None)
-
- def test_cdn_request(self):
- client = self.client
- conn = client.connection
- conn._make_cdn_connection(cdn_url="http://example.com")
- if conn.cdn_connection is not None:
- conn.cdn_connection.request = Mock()
- conn.cdn_connection.getresponse = Mock()
- conn.cdn_request("GET", path=["A", "B"])
- call_args = conn.cdn_connection.request.call_args_list[0][0]
- self.assertEqual(call_args[0], "GET")
- self.assert_(call_args[1].endswith("A/B"))
- hdrs = call_args[-1]
- self.assert_("pyrax" in hdrs["User-Agent"])
-
- def test_handle_swiftclient_exception_container(self):
- client = self.client
- gc = client.get_container
- client.get_container = Mock()
- side_effect = _swift_client.ClientException("Container GET failed: "
- "https://example.com/some_container 404")
- side_effect.http_status = 404
- client.get_container.side_effect = side_effect
- # Note: we're using delete_object because its first call
- # is get_container()
- self.assertRaises(exc.NoSuchContainer, client.delete_object,
- "some_container", "some_object")
- client.get_container = gc
-
- def test_handle_swiftclient_exception_object(self):
- client = self.client
- gc = client.get_container
- client.get_container = Mock()
- go = client.get_object
- bad = _swift_client.ClientException("Object GET failed: "
- "https://example.com/cont/some_object 404", http_status=404)
- client.get_object = Mock(side_effect=bad)
- # Note: we're using copy_object because it calls get_object().
- self.assertRaises(exc.NoSuchObject, client.copy_object,
- "some_container", "some_object", "fake")
- client.get_object = go
- client.get_container = gc
-
- def test_handle_swiftclient_exception_upload(self):
- client = self.client
- gc = client.get_container
- client.get_container = Mock()
- client.get_container.side_effect = _swift_client.ClientException(
- "Object PUT failed: foo/bar/baz 422 Unprocessable Entity")
- # Note: we're using delete_object because its first call
- # is get_container()
- self.assertRaises(exc.UploadFailed, client.delete_object,
- "some_container", "some_object")
- client.get_container = gc
-
- def test_handle_swiftclient_exception_others(self):
- client = self.client
- gc = client.get_container
- client.get_container = Mock()
- client.get_container.side_effect = _swift_client.ClientException(
- "Some other sort of error message")
- # Note: we're using delete_object because its first call
- # is get_container()
- self.assertRaises(_swift_client.ClientException, client.delete_object,
- "some_container", "some_object")
- client.get_container = gc
-
- def test_bulk_deleter(self):
- client = self.client
- container = self.cont_name
- object_names = utils.random_unicode()
- bd = FakeBulkDeleter(client, container, object_names)
- self.assertEqual(bd.client, client)
- self.assertEqual(bd.container, container)
- self.assertEqual(bd.object_names, object_names)
-
- def test_bulk_deleter_run(self):
- client = self.client
- container = self.cont_name
- object_names = utils.random_unicode()
- bd = FakeBulkDeleter(client, container, object_names)
-
- class FakeConn(object):
- pass
-
- class FakePath(object):
- path = utils.random_unicode()
-
- class FakeResp(object):
- status = utils.random_unicode()
- reason = utils.random_unicode()
-
- fpath = FakePath()
- conn = FakeConn()
- resp = FakeResp()
- # Need to make these ASCII, since some characters will confuse the
- # splitlines() call.
- num_del = random.randint(0, 100)
- num_not_found = random.randint(0, 100)
- status = utils.random_ascii()
- errors = utils.random_ascii()
- useless = utils.random_ascii()
- fake_read = """Number Deleted: %s
-Number Not Found: %s
-Response Status: %s
-Errors: %s
-
-Useless Line: %s
-""" % (num_del, num_not_found, status, errors, useless)
- resp.read = Mock(return_value=fake_read)
- client.connection.http_connection = Mock(return_value=(fpath, conn))
- conn.request = Mock()
- conn.getresponse = Mock(return_value=resp)
- self.assertFalse(bd.completed)
- bd.actual_run()
- self.assertTrue(bd.completed)
- results = bd.results
- self.assertEqual(results.get("deleted"), num_del)
- self.assertEqual(results.get("not_found"), num_not_found)
- self.assertEqual(results.get("status"), status)
- self.assertEqual(results.get("errors"), errors)
- self.assertTrue(useless not in results.values())
-
- def test_converted_last_modified_times_head_and_list_match(self):
- head_last_modified_string = "Mon, 7 Apr 2014 17:34:25 UTC"
- list_last_modified_string = "2014-04-07T17:34:24.112333"
- converted_head_datetime = _convert_head_object_last_modified_to_local(
- head_last_modified_string)
- attdict = {"last_modified": list_last_modified_string}
- converted_list_attributes = _convert_list_last_modified_to_local(
- attdict=attdict)
- converted_list_date = converted_list_attributes["last_modified"]
- self.assertEqual(converted_head_datetime, converted_list_date)
-
- def test_list_last_mod_does_not_round_up_for_zero_microseconds(self):
- list_last_modified_string = "2014-04-07T17:34:24.000000"
- attdict = {"last_modified": list_last_modified_string}
- converted_list_attributes = _convert_list_last_modified_to_local(
- attdict=attdict)
- converted_list_date = converted_list_attributes["last_modified"]
- self.assertTrue(converted_list_date.endswith(":24"))
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/tests/unit/test_cf_container.py b/tests/unit/test_cf_container.py
deleted file mode 100644
index 4cdf2062..00000000
--- a/tests/unit/test_cf_container.py
+++ /dev/null
@@ -1,453 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import os
-import random
-import unittest
-
-from mock import patch
-from mock import MagicMock as Mock
-
-import pyrax
-from pyrax.cf_wrapper.client import _swift_client
-from pyrax.cf_wrapper.container import Container
-from pyrax.cf_wrapper.container import Fault
-import pyrax.utils as utils
-import pyrax.exceptions as exc
-from pyrax.fakes import example_uri
-from pyrax.fakes import fake_attdict
-from pyrax.fakes import FakeContainer
-from pyrax.fakes import FakeIdentity
-from pyrax.fakes import FakeResponse
-from pyrax.fakes import FakeStorageObject
-
-
-
-class CF_ContainerTest(unittest.TestCase):
- def __init__(self, *args, **kwargs):
- reload(pyrax)
- self.orig_connect_to_cloudservers = pyrax.connect_to_cloudservers
- self.orig_connect_to_cloud_databases = pyrax.connect_to_cloud_databases
- ctclb = pyrax.connect_to_cloud_loadbalancers
- self.orig_connect_to_cloud_loadbalancers = ctclb
- ctcbs = pyrax.connect_to_cloud_blockstorage
- self.orig_connect_to_cloud_blockstorage = ctcbs
- super(CF_ContainerTest, self).__init__(*args, **kwargs)
- pyrax.identity = FakeIdentity()
- pyrax.connect_to_cloudservers = Mock()
- pyrax.connect_to_cloud_loadbalancers = Mock()
- pyrax.connect_to_cloud_databases = Mock()
- pyrax.connect_to_cloud_blockstorage = Mock()
- pyrax.set_credentials("fakeuser", "fakeapikey")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def setUp(self):
- pyrax.connect_to_cloudservers = Mock()
- pyrax.connect_to_cloud_loadbalancers = Mock()
- pyrax.connect_to_cloud_databases = Mock()
- pyrax.connect_to_cloud_blockstorage = Mock()
- pyrax.connect_to_cloudfiles()
- self.client = pyrax.cloudfiles
- self.client.connection.head_container = Mock()
- self.cont_name = utils.random_ascii()
- self.container = self.client.get_container(self.cont_name)
- self.obj_name = utils.random_ascii()
- self.fake_object = FakeStorageObject(self.client, self.cont_name,
- self.obj_name)
- self.client._container_cache = {}
- self.container.object_cache = {}
-
- def tearDown(self):
- self.client = None
- self.container = None
- pyrax.connect_to_cloudservers = self.orig_connect_to_cloudservers
- pyrax.connect_to_cloud_databases = self.orig_connect_to_cloud_databases
- octclb = self.orig_connect_to_cloud_loadbalancers
- pyrax.connect_to_cloud_loadbalancers = octclb
- octcbs = self.orig_connect_to_cloud_blockstorage
- pyrax.connect_to_cloud_blockstorage = octcbs
-
- def test_fault(self):
- fault = Fault()
- self.assertFalse(fault)
-
- def test_fetch_cdn(self):
- self.client.connection.cdn_request = Mock()
- self.client.connection.cdn_connection = "fake"
- resp = FakeResponse()
- resp.status = 204
- resp.getheaders = Mock()
- test_uri = "http://example.com"
- test_ttl = "6666"
- test_ssl_uri = "http://ssl.example.com"
- test_streaming_uri = "http://streaming.example.com"
- test_ios_uri = "http://ios.example.com"
- test_log_retention = True
- resp.getheaders.return_value = [("x-cdn-uri", test_uri),
- ("x-ttl", test_ttl), ("x-cdn-ssl-uri", test_ssl_uri),
- ("x-cdn-streaming-uri", test_streaming_uri),
- ("x-cdn-ios-uri", test_ios_uri),
- ("x-log-retention", test_log_retention)]
- self.client.connection.cdn_request.return_value = resp
- # We need an actual container
- cont = Container(self.client, "realcontainer", 0, 0)
- cont.client.cdn_enabled = True
- self.assertEqual(cont.cdn_uri, test_uri)
-
- def test_fetch_cdn_not_enabled(self):
- self.client.connection.cdn_request = Mock()
- self.client.connection.cdn_connection = "fake"
- resp = FakeResponse()
- resp.status = 204
- resp.getheaders = Mock()
- test_uri = "http://example.com"
- test_ttl = "6666"
- test_ssl_uri = "http://ssl.example.com"
- test_streaming_uri = "http://streaming.example.com"
- test_ios_uri = "http://ios.example.com"
- test_log_retention = True
- resp.getheaders.return_value = [("x-cdn-uri", test_uri),
- ("x-ttl", test_ttl), ("x-cdn-ssl-uri", test_ssl_uri),
- ("x-cdn-streaming-uri", test_streaming_uri),
- ("x-cdn-ios-uri", test_ios_uri),
- ("x-log-retention", test_log_retention)]
- self.client.connection.cdn_request.return_value = resp
- # We need an actual container
- cont = Container(self.client, "realcontainer", 0, 0)
- cont.client.cdn_enabled = False
- self.assertIsNone(cont.cdn_uri)
-
- def test_fetch_cdn_not_found(self):
- self.client.connection.cdn_request = Mock()
- self.client.connection.cdn_connection = "fake"
- resp = FakeResponse()
- resp.status = 404
- resp.getheaders = Mock()
- test_uri = "http://example.com"
- test_ttl = "6666"
- test_ssl_uri = "http://ssl.example.com"
- test_streaming_uri = "http://streaming.example.com"
- test_ios_uri = "http://ios.example.com"
- test_log_retention = True
- resp.getheaders.return_value = []
- self.client.connection.cdn_request.return_value = resp
- # We need an actual container
- cont = Container(self.client, "realcontainer", 0, 0)
- self.assertIsNone(cont.cdn_uri)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object_names(self):
- cont = self.container
- cont.client.get_container_object_names = Mock(return_value=["o1", "o2"])
- nms = cont.get_object_names()
- self.assertEqual(len(nms), 2)
- self.assert_("o1" in nms)
- self.assert_("o2" in nms)
- self.assert_("o3" not in nms)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_objects(self):
- cont = self.container
- cont.client.connection.get_container = Mock()
- cont.client.connection.get_container.return_value = ({},
- [{"name": "o1"}, {"name": "o2"}])
- objs = cont.get_objects()
- self.assertEqual(len(objs), 2)
- self.assert_("o1" in [objs[0].name, objs[1].name])
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object(self):
- cont = self.container
- cont.client.connection.get_container = Mock()
- cont.client.connection.head_object = Mock(return_value=fake_attdict)
- obj = cont.get_object("fake")
- self.assertEqual(obj.name, "fake")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object_from_cache(self):
- cont = self.container
- cont.client.connection.get_container = Mock()
- cont.client.connection.head_object = Mock(return_value=fake_attdict)
- cnt = random.randint(2, 6)
- for ii in range(cnt):
- obj = cont.get_object("fake")
- self.assertEqual(cont.client.connection.head_object.call_count, 1)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object_no_cache(self):
- cont = self.container
- cont.client.connection.get_container = Mock()
- cont.client.connection.head_object = Mock(return_value=fake_attdict)
- cnt = random.randint(2, 6)
- for ii in range(cnt):
- obj = cont.get_object("fake", cached=False)
- self.assertEqual(cont.client.connection.head_object.call_count, cnt)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_get_object_missing(self):
- cont = self.container
- cont.client.connection.get_container = Mock()
- side_effect = _swift_client.ClientException(
- "Object GET failed: https://example.com/cont/some_object 404")
- side_effect.http_status = 404
- cont.client.connection.head_object = Mock(side_effect=side_effect)
- self.assertRaises(exc.NoSuchObject, cont.get_object, "missing")
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_list_subdirs(self):
- cont = self.container
- clt = cont.client
- clt.list_container_subdirs = Mock()
- marker = utils.random_unicode()
- limit = utils.random_unicode()
- prefix = utils.random_unicode()
- delimiter = utils.random_unicode()
- full_listing = utils.random_unicode()
- cont.list_subdirs(marker=marker, limit=limit, prefix=prefix,
- delimiter=delimiter, full_listing=full_listing)
- clt.list_container_subdirs.assert_called_once_with(cont.name,
- marker=marker, limit=limit, prefix=prefix, delimiter=delimiter,
- full_listing=full_listing)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_store_object(self):
- cont = self.container
- cont.client.connection.head_container = Mock()
- cont.client.connection.put_object = Mock()
- gobj = cont.client.get_object
- cont.client.get_object = Mock(return_value=self.fake_object)
- content = "something"
- etag = utils.get_checksum(content)
- obj = cont.store_object(self.obj_name, content,
- content_type="test/test", etag=etag,
- content_encoding="gzip")
- self.assertEqual(cont.client.connection.put_object.call_count, 1)
- cont.client.get_object = gobj
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_upload_file(self):
- cont = self.container
- cont.client.connection.head_container = Mock()
- cont.client.connection.put_object = Mock()
- gobj = cont.client.get_object
- cont.client.get_object = Mock(return_value=self.fake_object)
- with utils.SelfDeletingTempfile() as tmpname:
- small_file_contents = "Test Value " * 25
- cont.client.max_file_size = len(small_file_contents) + 1
- with open(tmpname, "wb") as tmp:
- tmp.write(small_file_contents)
- fname = os.path.basename(tmpname)
- fake_type = "test/test"
- cont.upload_file(tmpname, content_type=fake_type)
- self.assertEqual(cont.client.connection.put_object.call_count, 1)
- cont.client.get_object = gobj
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_delete_object(self):
- cont = self.container
- client = cont.client
- cont.client.connection.head_container = Mock()
- cont.client.connection.delete_object = Mock()
- cont.delete_object(self.obj_name)
- cont.client.connection.delete_object.assert_called_with(self.cont_name,
- self.obj_name, response_dict=None)
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def test_delete_all_objects(self):
- cont = self.container
- client = cont.client
- cont.client.connection.head_container = Mock()
- cont.client.bulk_delete = Mock()
- cont.client.get_container_object_names = Mock(
- return_value=[self.obj_name])
- cont.delete_all_objects()
- cont.client.bulk_delete.assert_called_once_with(cont, [self.obj_name],
- async=False)
-
- def test_delete(self):
- cont = self.container
- cont.client.connection.delete_container = Mock()
- cont.delete()
- cont.client.connection.delete_container.assert_called_with(
- self.cont_name, response_dict=None)
-
- def test_fetch_object(self):
- cont = self.container
- cont.client.fetch_object = Mock()
- oname = utils.random_ascii()
- incmeta = random.choice((True, False))
- csize = random.randint(0, 1000)
- cont.fetch_object(oname, include_meta=incmeta, chunk_size=csize)
- cont.client.fetch_object.assert_called_once_with(cont, oname,
- include_meta=incmeta, chunk_size=csize)
-
- def test_download_object(self):
- cont = self.container
- cont.client.download_object = Mock()
- oname = utils.random_ascii()
- dname = utils.random_ascii()
- stru = random.choice((True, False))
- cont.download_object(oname, dname, structure=stru)
- cont.client.download_object.assert_called_once_with(cont, oname,
- dname, structure=stru)
-
- def test_get_metadata(self):
- cont = self.container
- cont.client.connection.head_container = Mock()
- cont.client.connection.head_container.return_value = {
- "X-Container-Meta-Foo": "yes", "Some-Other-Key": "no"}
- meta = cont.get_metadata()
- self.assert_(len(meta) == 1)
- self.assert_("X-Container-Meta-Foo" in meta)
-
- def test_set_metadata(self):
- cont = self.container
- cont.client.connection.post_container = Mock()
- cont.set_metadata({"newkey": "newval"})
- cont.client.connection.post_container.assert_called_with(cont.name,
- {"X-Container-Meta-newkey": "newval"}, response_dict=None)
-
- def test_set_metadata_prefix(self):
- cont = self.container
- cont.client.connection.post_container = Mock()
- prefix = utils.random_unicode()
- cont.set_metadata({"newkey": "newval"}, prefix=prefix)
- cont.client.connection.post_container.assert_called_with(cont.name,
- {"%snewkey" % prefix: "newval"}, response_dict=None)
-
- def test_remove_metadata_key(self):
- cont = self.container
- cont.client.remove_container_metadata_key = Mock()
- key = utils.random_unicode()
- prefix = utils.random_unicode()
- cont.remove_metadata_key(key, prefix=prefix)
- cont.client.remove_container_metadata_key.assert_called_once_with(cont,
- key, prefix=prefix)
-
- def test_set_web_index_page(self):
- cont = self.container
- page = "test_index.html"
- cont.client.connection.post_container = Mock()
- cont.set_web_index_page(page)
- cont.client.connection.post_container.assert_called_with(cont.name,
- {"X-Container-Meta-Web-Index": page}, response_dict=None)
-
- def test_set_web_error_page(self):
- cont = self.container
- page = "test_error.html"
- cont.client.connection.post_container = Mock()
- cont.set_web_error_page(page)
- cont.client.connection.post_container.assert_called_with(cont.name,
- {"X-Container-Meta-Web-Error": page}, response_dict=None)
-
- def test_make_public(self, ttl=None):
- cont = self.container
- cont.cdn_uri = ""
- cont.client.connection.cdn_request = Mock()
- cont.client.connection.cdn_connection = "fake"
- example = "http://example.com"
- ttl = 6666
- resp = FakeResponse()
- resp.headers = [("x-cdn-uri", example), ("c", "d")]
- cont.client.connection.cdn_request.return_value = resp
- cont.client.connection.cdn_connection = "fake"
- cont.make_public(ttl)
- cont.client.connection.cdn_request.assert_called_with("PUT",
- [cont.name], hdrs={"X-TTL": str(ttl), "X-CDN-Enabled": "True"})
-
- def test_make_private(self):
- cont = self.container
- cont.client.connection.cdn_request = Mock()
- cont.client.connection.cdn_connection = "fake"
- example = "http://example.com"
- cont.cdn_uri = example
- resp = FakeResponse()
- resp.headers = [("c", "d")]
- cont.client.connection.cdn_request.return_value = resp
- cont.client.connection.cdn_connection = "fake"
- cont.make_private()
- cont.client.connection.cdn_request.assert_called_with("PUT",
- [cont.name], hdrs={"X-CDN-Enabled": "False"})
-
- def test_copy_object(self):
- cont = self.container
- cont.client.copy_object = Mock()
- obj = utils.random_unicode()
- new_cont = utils.random_unicode()
- new_name = utils.random_unicode()
- extra_info = utils.random_unicode()
- cont.copy_object(obj, new_cont, new_obj_name=new_name,
- extra_info=extra_info)
- cont.client.copy_object.assert_called_once_with(cont, obj, new_cont,
- new_obj_name=new_name, extra_info=extra_info)
-
- def test_move_object(self):
- cont = self.container
- cont.client.move_object = Mock()
- obj = utils.random_unicode()
- new_cont = utils.random_unicode()
- new_name = utils.random_unicode()
- extra_info = utils.random_unicode()
- cont.move_object(obj, new_cont, new_obj_name=new_name,
- extra_info=extra_info)
- cont.client.move_object.assert_called_once_with(cont, obj, new_cont,
- new_obj_name=new_name, extra_info=extra_info)
-
- def test_change_object_content_type(self):
- cont = self.container
- cont.client.change_object_content_type = Mock()
- cont.change_object_content_type("fakeobj", "foo")
- cont.client.change_object_content_type.assert_called_once_with(cont,
- "fakeobj", new_ctype="foo", guess=False)
-
- def test_get_temp_url(self):
- cont = self.container
- nm = utils.random_ascii()
- sav = cont.name
- cont.name = utils.random_ascii()
- cont.client.get_temp_url = Mock()
- secs = random.randint(1, 1000)
- cont.get_temp_url(nm, seconds=secs)
- cont.client.get_temp_url.assert_called_with(cont, nm, seconds=secs,
- method="GET")
- cont.name = sav
-
- def test_delete_object_in_seconds(self):
- cont = self.container
- cont.client.delete_object_in_seconds = Mock()
- secs = random.randint(1, 1000)
- obj_name = utils.random_ascii()
- cont.delete_object_in_seconds(obj_name, secs)
- cont.client.delete_object_in_seconds.assert_called_once_with(cont,
- obj_name, secs)
-
- nm = utils.random_ascii()
- sav = cont.name
- cont.name = utils.random_ascii()
- cont.client.get_temp_url = Mock()
- secs = random.randint(1, 1000)
- cont.get_temp_url(nm, seconds=secs)
- cont.client.get_temp_url.assert_called_with(cont, nm, seconds=secs,
- method="GET")
- cont.name = sav
-
- def test_cdn_enabled(self):
- cont = self.container
- cont.cdn_uri = None
- self.assertFalse(cont.cdn_enabled)
- cont.cdn_uri = "http://example.com"
- self.assert_(cont.cdn_enabled)
-
- def test_cdn_ttl(self):
- cont = self.container
- ret = cont.cdn_ttl
- self.assertEqual(ret, self.client.default_cdn_ttl)
-
- def test_cdn_ssl_uri(self):
- cont = self.container
- ret = cont.cdn_ssl_uri
- self.assertIsNone(ret)
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/tests/unit/test_cf_storage_object.py b/tests/unit/test_cf_storage_object.py
deleted file mode 100644
index b60f6b8d..00000000
--- a/tests/unit/test_cf_storage_object.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import os
-import random
-import unittest
-
-from mock import patch
-from mock import MagicMock as Mock
-
-import pyrax
-from pyrax.cf_wrapper.storage_object import StorageObject
-import pyrax.exceptions as exc
-import pyrax.utils as utils
-from pyrax.fakes import fake_attdict
-from pyrax.fakes import FakeContainer
-from pyrax.fakes import FakeIdentity
-from pyrax.fakes import FakeResponse
-
-
-
-class CF_StorageObjectTest(unittest.TestCase):
- def __init__(self, *args, **kwargs):
- reload(pyrax)
- self.orig_connect_to_cloudservers = pyrax.connect_to_cloudservers
- self.orig_connect_to_cloudfiles = pyrax.connect_to_cloudfiles
- self.orig_connect_to_cloud_databases = pyrax.connect_to_cloud_databases
- ctclb = pyrax.connect_to_cloud_loadbalancers
- self.orig_connect_to_cloud_loadbalancers = ctclb
- ctcbs = pyrax.connect_to_cloud_blockstorage
- self.orig_connect_to_cloud_blockstorage = ctcbs
- super(CF_StorageObjectTest, self).__init__(*args, **kwargs)
- self.obj_name = "testobj"
- self.container_name = "testcont"
- pyrax.connect_to_cloudservers = Mock()
- pyrax.connect_to_cloud_loadbalancers = Mock()
- pyrax.connect_to_cloud_databases = Mock()
- pyrax.connect_to_cloud_blockstorage = Mock()
-
- @patch('pyrax.cf_wrapper.client.Container', new=FakeContainer)
- def setUp(self):
- pyrax.connect_to_cloudservers = Mock()
- pyrax.connect_to_cloud_loadbalancers = Mock()
- pyrax.connect_to_cloud_databases = Mock()
- pyrax.connect_to_cloud_blockstorage = Mock()
- pyrax.clear_credentials()
- pyrax.identity = FakeIdentity()
- pyrax.set_setting("region", None)
- pyrax.set_credentials("fakeuser", "fakeapikey")
- pyrax.connect_to_cloudfiles()
- self.client = pyrax.cloudfiles
- self.container = FakeContainer(self.client, self.container_name, 0, 0)
- self.container.name = self.container_name
- self.client.get_container = Mock(return_value=self.container)
- self.client.connection.get_container = Mock()
- self.client.connection.head_object = Mock(return_value=fake_attdict)
- self.storage_object = self.client.get_object(self.container, "testobj")
- self.client._container_cache = {}
- self.container.object_cache = {}
-
- def tearDown(self):
- self.client = None
- self.container = None
- self.storage_object = None
- pyrax.connect_to_cloudservers = self.orig_connect_to_cloudservers
- pyrax.connect_to_cloudfiles = self.orig_connect_to_cloudfiles
- pyrax.connect_to_cloud_databases = self.orig_connect_to_cloud_databases
- octclb = self.orig_connect_to_cloud_loadbalancers
- pyrax.connect_to_cloud_loadbalancers = octclb
- octcbs = self.orig_connect_to_cloud_blockstorage
- pyrax.connect_to_cloud_blockstorage = octcbs
-
- def test_init(self):
- cname = utils.random_unicode()
- oname = utils.random_unicode()
- ctype = utils.random_unicode()
- etag = utils.random_unicode()
- tbytes = random.randint(0, 1000)
- lmod = random.randint(0, 1000)
- cont = FakeContainer(self.client, cname, 0, 0)
- # Using container
- obj = StorageObject(self.client, cont, name=oname, total_bytes=tbytes,
- content_type=ctype, last_modified=lmod, etag=etag)
- self.assertEqual(obj.name, oname)
- self.assertEqual(obj.container, cont)
- self.assertEqual(obj.container.name, cname)
- self.assertEqual(obj.total_bytes, tbytes)
- self.assertEqual(obj.content_type, ctype)
- self.assertEqual(obj.last_modified, lmod)
- self.assertEqual(obj.etag, etag)
- # Using container name
- obj = StorageObject(self.client, cname, name=oname, total_bytes=tbytes,
- content_type=ctype, last_modified=lmod, etag=etag)
- # This will default to using the container defined in setUp().
- self.assertEqual(obj.container.name, self.container.name)
-
- def test_read_attdict(self):
- tname = "something"
- ttype = "foo/bar"
- tbytes = 12345
- tlastmodified = "2222-02-22T22:22:22.222222"
- tetag = "123123123"
- dct = {"name": tname, "content_type": ttype, "bytes": tbytes,
- "last_modified": tlastmodified, "hash": tetag}
- obj = self.storage_object
- obj._read_attdict(dct)
- self.assertEqual(obj.name, tname)
- self.assertEqual(obj.content_type, ttype)
- self.assertEqual(obj.total_bytes, tbytes)
- self.assertEqual(obj.last_modified, tlastmodified)
- self.assertEqual(obj.etag, tetag)
-
- def test_subdir(self):
- tname = "something"
- dct = {"subdir": tname}
- obj = self.storage_object
- obj._read_attdict(dct)
- self.assertEqual(obj.name, tname)
-
- def test_get(self):
- obj = self.storage_object
- obj.client.connection.get_object = Mock()
- meta = {"a": "b"}
- data = "This is the contents of the file"
- obj.client.connection.get_object.return_value = (meta, data)
- ret = obj.fetch()
- self.assertEqual(ret, data)
- ret = obj.fetch(include_meta=True)
- self.assertEqual(ret, (meta, data))
-
- def test_download(self):
- obj = self.storage_object
- obj.client.download_object = Mock()
- dname = utils.random_unicode()
- stru = random.choice((True, False))
- obj.download(dname, structure=stru)
- obj.client.download_object.assert_called_once_with(obj.container, obj,
- dname, structure=stru)
-
- def test_delete(self):
- obj = self.storage_object
- obj.client.connection.delete_object = Mock()
- obj.delete()
- obj.client.connection.delete_object.assert_called_with(
- obj.container.name, obj.name, response_dict=None)
-
- def test_purge(self):
- obj = self.storage_object
- cont = obj.container
- cont.cdn_uri = None
- self.assertRaises(exc.NotCDNEnabled, obj.purge)
- cont.cdn_uri = "http://example.com"
- obj.client.connection.cdn_request = Mock()
- obj.purge()
- obj.client.connection.cdn_request.assert_called_with("DELETE",
- [cont.name, obj.name], hdrs={})
-
- def test_get_metadata(self):
- obj = self.storage_object
- obj.client.connection.head_object = Mock()
- obj.client.connection.head_object.return_value = {
- "X-Object-Meta-Foo": "yes",
- "Some-Other-Key": "no"}
- meta = obj.get_metadata()
- self.assertEqual(meta, {"X-Object-Meta-Foo": "yes"})
-
- def test_set_metadata(self):
- obj = self.storage_object
- obj.client.connection.post_object = Mock()
- obj.client.connection.head_object = Mock(return_value={})
- obj.set_metadata({"newkey": "newval"})
- obj.client.connection.post_object.assert_called_with(obj.container.name,
- obj.name, {"X-Object-Meta-newkey": "newval"},
- response_dict=None)
-
- def test_set_metadata_prefix(self):
- obj = self.storage_object
- obj.client.connection.post_object = Mock()
- obj.client.connection.head_object = Mock(return_value={})
- prefix = utils.random_unicode()
- obj.set_metadata({"newkey": "newval"}, prefix=prefix)
- obj.client.connection.post_object.assert_called_with(obj.container.name,
- obj.name, {"%snewkey" % prefix: "newval"},
- response_dict=None)
-
- def test_remove_metadata_key(self):
- obj = self.storage_object
- obj.client.connection.post_object = Mock()
- obj.client.connection.head_object = Mock(return_value={})
- obj.remove_metadata_key("newkey")
- obj.client.connection.post_object.assert_called_with(obj.container.name,
- obj.name, {}, response_dict=None)
-
- def test_copy(self):
- obj = self.storage_object
- cont = obj.container
- cont.copy_object = Mock()
- new_cont = utils.random_unicode()
- new_name = utils.random_unicode()
- extra_info = utils.random_unicode()
- obj.copy(new_cont, new_obj_name=new_name, extra_info=extra_info)
- cont.copy_object.assert_called_once_with(obj, new_cont,
- new_obj_name=new_name, extra_info=extra_info)
-
- def test_move(self):
- obj = self.storage_object
- cont = obj.container
- cont.move_object = Mock()
- new_cont = utils.random_unicode()
- new_name = utils.random_unicode()
- extra_info = utils.random_unicode()
- obj.move(new_cont, new_obj_name=new_name, extra_info=extra_info)
- cont.move_object.assert_called_once_with(obj, new_cont,
- new_obj_name=new_name, extra_info=extra_info)
-
- def test_change_content_type(self):
- obj = self.storage_object
- obj.client.change_object_content_type = Mock()
- obj.change_content_type("foo")
- obj.client.change_object_content_type.assert_called_once_with(
- obj.container, obj, new_ctype="foo", guess=False)
-
- def test_get_temp_url(self):
- obj = self.storage_object
- obj.client.get_temp_url = Mock()
- secs = random.randint(1, 1000)
- obj.get_temp_url(seconds=secs)
- obj.client.get_temp_url.assert_called_with(obj.container, obj,
- seconds=secs, method="GET")
-
- def test_delete_in_seconds(self):
- obj = self.storage_object
- obj.client.connection.post_object = Mock()
- secs = random.randint(1, 1000)
- obj.delete_in_seconds(seconds=secs)
- obj.client.connection.post_object.assert_called_with(obj.container.name,
- obj.name, {'X-Delete-After': "%s" % secs}, response_dict=None)
-
- def test_repr(self):
- obj = self.storage_object
- rep = obj.__repr__()
- self.assert_("