diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index fd74a3d1..f993cd3f 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -1,5 +1,40 @@
# Release Notes for pyrax
+###2014.05.06 - Version 1.8.0
+ - Identity
+ - Added **Context Objects** as a way to encapsulate an authenticated
+ session.
+ - Context objects remove the limitation in pyrax of only working with a
+ single authenticated session at a time.
+ - Improves the ability to work with multiple providers at once, or across
+ multiple regions for the same provider.
+ - More information in the **context_objects.md** document in the docs/
+ folder.
+
+ - Cloud Files
+ - Fixed missing URL quoting for bulk deletes. GitHub #350
+ - Multiple improvements to sync_folder_to_container in GitHub #355:
+ - Added the ability to specify a prefix to be added to the object name
+ during checking and uploading during a sync
+ - Sped up sync_folder_to_container by having it pull down a list of
+ objects all at once to use to compare against instead of checking once
+ for each file.
+ - Added verbose logging to sync_folder_to_container (Originally requested
+ in GitHub #250)
+
+ - General
+ - Fixed issue where one bad section in the configuration file caused threw
+ an exception that terminated your app. GitHub #346
+ - Removed the need to specify a tenant_id when authenticating with a token.
+ GitHub #345
+
+ - Block Storage
+ - Added missing update methods to Cloud Block Storage.
+
+ - Documentation
+ - Updated the queues docs to include listing of queues. GitHub #353
+
+
###2014.04.07 - Version 1.7.3
- Identity
- Updated the identity module and tests to work with the new http library.
@@ -77,7 +112,8 @@
###2014.02.03 - Version 1.6.3
- Cloud Monitoring:
- Added back missing error info. GitHub #285
- - Added support for Overviews and Changelogs from Cloud Monitoring. GitHub #267
+ - Added support for Overviews and Changelogs from Cloud Monitoring. GitHub
+ #267
- Autoscale:
- Corrected how networks are created when none are specified. GitHub #262
- Added load balancers to sample code for creating a scaling group.
@@ -87,12 +123,16 @@
- Cloud Files:
- Add `use_servicenet` setting for Cloud Files. GitHub #273
- Fixed bug in passing TTL to `delete_in_seconds()`. GitHub #281
- - Added a fix for GETting 0-byte content with Dynamic Large Objects (multipart files). GitHub #258
- - Include container name in `X-Object-Manifest` header when creating DLO. GitHub #261
- - Use `X-Object-Manifest` instead of `X-Object-Meta-Manifest` when creating DLO. GitHub #260
+ - Added a fix for GETting 0-byte content with Dynamic Large Objects
+ (multipart files). GitHub #258
+ - Include container name in `X-Object-Manifest` header when creating DLO.
+ GitHub #261
+ - Use `X-Object-Manifest` instead of `X-Object-Meta-Manifest` when creating
+ DLO. GitHub #260
- Cloud Load Balancers:
- Added `httpsRedirect` param for Cloud Load Balancers. GitHub #277
- - Adding an entry for the `id` attribute to the Node's `to_dict()` method. GitHub #276
+ - Adding an entry for the `id` attribute to the Node's `to_dict()` method.
+ GitHub #276
- Cloud DNS:
- Handle empty bodies in GET responses from the Cloud DNS API. GitHub #280
- Cloud Servers:
@@ -273,7 +313,8 @@
- Fixed a bug that prevented region from being properly set. Issue #86.
###2013.06.04 - Version 1.4.4
-- Fixed a bug when using environment variables to set the identity_type. Issue #82.
+- Fixed a bug when using environment variables to set the identity_type. Issue
+ #82.
###2013.06.03 - Version 1.4.3
- Added support for having objects automatically deleted from Cloud Files after
@@ -288,22 +329,23 @@
###2013.05.29 - Version 1.4.0
- Added support for **all** OpenStack clouds. Previous versions only supported
- Rackspace authentication methods.
+ Rackspace authentication methods.
- Configuration files now support multiple cloud environments in the same file.
- You can switch between environments by calling `pyrax.set_environment("env")`,
- where `env` is the name of the desired environment.
+ You can switch between environments by calling
+ `pyrax.set_environment("env")`, where `env` is the name of the desired
+ environment.
- Configuration settings can now be stored in environment variables. These all
- begin with `CLOUD_`; a full list can be found in the [main pyrax
- documentation](https://github.com/rackspace/pyrax/tree/master/docs/pyrax_doc.md).
+ begin with `CLOUD_`; a full list can be found in the [main pyrax
+ documentation](https://github.com/rackspace/pyrax/tree/master/docs/pyrax_doc.md).
- Available regions are now available in the `pyrax.regions` attribute after
- authentication.
+ authentication.
- Services that are available for the current cloud provider are now available
- in the `pyrax.services` attribute.
+ in the `pyrax.services` attribute.
- Fixed an issue in Cloud Databases in which the `volume` attribute was
- sometimes a dict and sometimes an instance of `CloudDatabaseVolume`. Now it
- will always be an instance.
+ sometimes a dict and sometimes an instance of `CloudDatabaseVolume`. Now it
+ will always be an instance.
- Added a smoke test script to the integrated tests. It currently covers the
- compute, networking, database, and object_store services.
+ compute, networking, database, and object_store services.
- Removed unnecessary hack for compute URIs.
- Cleaned up some naming and formatting inconsistencies.
@@ -412,7 +454,7 @@ container class.
'DRAINING' condition (GitHub #6). Modified the rax_identity to accept
UTC dates returned from the LON datacenter (GitHub #5). Fixed an
issue that prevented HTTP debugging from turning off in swiftclient.
-
+
###2013.01.15 - Version 1.2.4
- Added support for keychain storage of credentials for authentication.
@@ -422,7 +464,8 @@ issue that prevented HTTP debugging from turning off in swiftclient.
- Added the 'halfClosed' parameter to the create() method of load balancers.
###2013.01.03 - Version 1.2.2
-- Fixed an issue that was causing calls to cloudservers to needlessly re-authenticate.
+- Fixed an issue that was causing calls to cloudservers to needlessly
+ re-authenticate.
###2012.12.27 - Version 1.2.1
- Removed old class docs that were no longer needed in this release.
@@ -437,7 +480,7 @@ issue that prevented HTTP debugging from turning off in swiftclient.
- Added a requirement for python-novaclient>=2.10.0.
###2012.12.18 - Version 1.1.6b
-- Removed the code that controlled when pyrax connected to services.
+- Removed the code that controlled when pyrax connected to services.
- Changed the User-agent format to match the other SDKs.
###2012.12.17 - Version 1.1.5b
@@ -447,23 +490,28 @@ issue that prevented HTTP debugging from turning off in swiftclient.
###2012.12.13 - Version 1.1.4b
- Added the ability to connect to the internal URL for Cloud Files.
- Added limit and marker to the base client/manager classes.
-- Added the cloudfiles Container and StorageObject classes to the pyrax namespace.
+- Added the cloudfiles Container and StorageObject classes to the pyrax
+ namespace.
###2012.12.10 - Version 1.1.2b
- Added a test that was missing in the previous release.
###2012.12.07 - Version 1.1.1b
-- Added the ability for developers to customize the User-agent string for their applications.
+- Added the ability for developers to customize the User-agent string for their
+ applications.
###2012.11.26 - Version 1.1.1b
- Added Cloud Block Storage support.
-- Added the refactored code for Cloud Load Balancers that removes the dependency on the python-cloudlb library.
+- Added the refactored code for Cloud Load Balancers that removes the
+ dependency on the python-cloudlb library.
###2012.11.24 - Version 1.0.4b
- Maintenance fix release.
###2012.11.20
-- Improved the handling of CDN calls so they don't fail as often, and are more resilient when they do.
+- Improved the handling of CDN calls so they don't fail as often, and are more
+ resilient when they do.
###2012.11.06
-- Release of the initial beta for pyrax. Supports Cloud Servers, Cloud Files, and Cloud Load Balancers.
+- Release of the initial beta for pyrax. Supports Cloud Servers, Cloud Files,
+ and Cloud Load Balancers.
diff --git a/docs/context_objects.md b/docs/context_objects.md
new file mode 100644
index 00000000..2a9f4ce6
--- /dev/null
+++ b/docs/context_objects.md
@@ -0,0 +1,133 @@
+# Context Objects
+
+Context objects represent a single authenticated session. You can work with as many context objects as you like at the same time without worrying about logging in or out of each one to work with the other. Earlier versions of pyrax (before 1.8.0) only allowed you to work with one authenticated session at a time.
+
+This ability is useful if you ever need to work with multiple projects (accounts) at the same time, or with multiple users within the same project.
+
+## Creating a Context Object
+
+To create a context object, you call:
+
+ ctx = pyrax.create_context({id_type})
+
+where `id_type` is either "keystone" or "rackspace". If you've defined the identity type you wish to use in either your `~/.pyrax.cfg` file, or in environment variables, you can omit the id_type from the call:
+
+ ctx = pyrax.create_context()
+
+If you have multiple **[environments](https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#configuration-environments)** defined, you may specify the environment to use when creating the context by specifying that name in the `env` parameter:
+
+ ctx = pyrax.create_context(env="{my_special_environment}")
+
+If you don't specify an environment, the current environment is used. You may also populate the context object with login credential information, as well as the `verify_ssl` setting. The full call with all available parameters is:
+
+ ctx = pyrax.create_context(id_type=None, env=None, username=None,
+ password=None, tenant_id=None, tenant_name=None, api_key=None,
+ verify_ssl=None)
+
+At this point you have an unauthenticated context. You must authenticate before you can do anything useful with a context object. To authenticate you need to provide your credentials if you haven't already when you created the object. You can either set them individually:
+
+ ctx.username = {your_user_name}
+ ctx.password = {your_password}
+
+...or you can set them together:
+
+ ctx.set_credentials({your_user_name}, {your_password})
+
+...or if you have them stored in a file (see the information on **[credential files](https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating)** for how to set one up), you can call:
+
+ ctx.set_credential_file({path/to/your/file})
+
+After you have set your credentials, you call:
+
+ ctx.authenticate()
+
+This submits your credentials, and assuming that they are valid, get back a Service Catalog that contains all of the services and regions that the authenticated user is authorized to use.
+
+If you have your password stored in your system's keychain, you can set your credentials and authenticate with a single call:
+
+ ctx.keyring_auth({username})
+
+
+## Working With Context Objects
+
+Once you have an authenticated context object, you can work with the various services (e.g., object storage, compute, databases) for each region that your provider offers. Examples of regions for Rackspace are **"DFW"**, **"LON"**, **"SYD"**, while HP offers regions such as **"region-a.geo-1"** and **"region-b.geo-1"**.
+
+Many OpenStack installations only have a single region. In those cases it might seem a little annoying to have to include that.
+
+### Service Names
+
+The various services are known by several types of names: descriptive names, project code names, and vendor product names. For example, the **compute** service is known within OpenStack as project **nova**, at Rackspace as the **Cloud Servers** product, and at HP as the **Cloud Compute** product. The descriptive name is the one that is used in these docs, but it is common for developers to use the other variations. The older versions of pyrax (before 1.8.0) primarily used the Rackspace-branded name for the service.
+
+Pyrax accepts any of these different names as aliases for the services. Here is a partial list of these aliases for many of the current services:
+
+Code Name | Service Name
+---- | ----
+nova | compute
+cloudservers | compute
+swift | object_store
+cloudfiles | object_store
+cloud_loadbalancers | load_balancer
+trove | database
+cloud_databases | database
+cinder | volume
+cloud_blockstorage | volume
+designate | dns
+cloud_dns | dns
+neutron | network
+cloud_networks | network
+glance | image
+images | image
+marconi | queues
+queues | queues
+cloud_monitoring | monitor
+autoscale | autoscale
+
+### Getting a Client
+
+The simplest way to get a client is to call:
+
+ client = ctx.get_client({service}, {region})
+
+For example, if you want a client to interact with your servers in the ORD region of Rackspace, you call:
+
+ srvr_ord = ctx.get_client("compute", "ORD")
+ servers = srvr_ord.list()
+
+The following two statements behave identically, as pyrax maps the code names to the actual service names:
+
+ srvr_ord = ctx.get_client("nova", "ORD")
+ srvr_ord = ctx.get_client("cloudservers", "ORD")
+
+Once you have the client, you use it as you would use clients in prior versions of pyrax. As an example, once you have `srvr_ord` defined above, to get a list of your servers in that region, you call:
+
+ servers = srvr_ord.list()
+
+#### Private (Internal) Clients
+
+Some services offer internal URLs; these are typically used for communication between resources within the same datacenter. If you are working within a datacenter, these are typically more efficient and reduce or eliminate bandwidth charges with many commercial providers. A typical use case is storing objects in swift from a compute resource in the same datacenter.
+
+To get a client that works with the internal URL, add the parameter `public=False` to the `get_client()` call:
+
+ storage_ord = ctx.get_client("object_store", "ORD", public=False)
+
+If there is no internal URL defined for the service, a **`NoEndpointForService`** exception is raised.
+
+## Shortcuts
+
+Context objects provide convenient ways to access the clients in order to make working with pyrax simpler. You can use standard dot notation to define your clients:
+
+ srvr_ord = ctx.compute.ORD.client
+ # - or -
+ srvr_ord = ctx.ORD.compute.client
+
+The ordering of service.region and region.service isn't important; either one resolves to the client for that service/region combination.
+
+Another use of this notation is to get an object with all the services in a given region:
+
+ syd_svcs = ctx.SYD
+ server_clt = syd_svcs.compute.client
+ db_clt = syd_svcs.database.client
+
+Note that the context object _must_ be authenticated before you attempt to access it using dot notation as described here. If the context has not been authenticated, a **`NotAuthenticated`** exception is raised. Also, regions containing periods in their name will not work as shortcuts, since those periods are interpreted by Python as object dot notation. If you're working with a region such as "**region-a.geo-1**", which is one of HP Cloud's regions, you will have to use standard dict syntax to access it:
+
+ compute_client = ctx.compute["region-a.geo-1"].client
diff --git a/docs/getting_started.md b/docs/getting_started.md
index b4d607ba..06083a0e 100644
--- a/docs/getting_started.md
+++ b/docs/getting_started.md
@@ -38,6 +38,9 @@ Please note that **all versions of pyrax beginning with 1.4.0 require that you d
1. **Environment Variable** - If you don't have a configuration file, pyrax checks for the environment variable `CLOUD_ID_TYPE`. Set this by executing `export CLOUD_ID_TYPE=keystone` in a bash shell, or by setting it in the System section of the Control Panel in Windows.
1. **Set in Code** - if you can't do either of the above, change the import statement to add `pyrax.set_setting("identity_type", "keystone")` immediately after the `import pyrax` statement.
+Note that if you are using the Rackspace Cloud, you would replace "keystone" in the above examples with "rackspace".
+
+
## Authenticating
You can authenticate in any one of three ways:
@@ -122,7 +125,7 @@ Please note that if you used `auth_with_token()` to authenticate originally, pyr
## Pyrax Configuration
You can control how pyrax behaves through the configuration file. It should be named `~/.pyrax.cfg`. Like the credential file, `~/.pyrax.cfg` is a standard configuration file. Alternatively, you may set these values using environment variables in the OS. Note that the configuration file values take precendence over any environment variables. Environment variables also do not support multiple configurations.
-Do **not** include login credentials, such as passwords, in the configuration file. As this is a defined file in a known location, it is a security risk to have your login information stored in clear text. You may use a [credential file](#authenticating) if you wish to store your credentials on disk; this can be named whatever you wish, and placed anywhere on disk, since you pass the full path to the file when authenticating this way. Please note that credentials stored in the configuration file will be ignored, and a warning will be issued if they are found.
+**Do not include login credentials**, such as passwords, in the configuration file. As this is a defined file in a known location, it is a security risk to have your login information stored in clear text. You may use a [credential file](#authenticating) if you wish to store your credentials on disk; this can be named whatever you wish, and placed anywhere on disk, since you pass the full path to the file when authenticating this way. Please note that credentials stored in the configuration file will be ignored, and a warning will be issued if they are found.
**NOTE**: At the very least, you *must* set the `identity_type` setting so that can use the correct identity class. Prior versions only worked with Rackspace identity, but that is no longer the case. If you don't want to use a configuration file or an environment variable, you can do this in code:
@@ -160,6 +163,7 @@ Setting | Affects | Default | Notes | Env. Variable
**custom_user_agent** | Customizes the User-agent string sent to the server. | -none- | | CLOUD_USER_AGENT
**debug** | When True, causes all HTTP requests and responses to be output to the console to aid in debugging. | False | Previous versions called this setting 'http_debug'. | CLOUD_DEBUG
**verify_ssl** | Set this to False to bypass SSL certificate verification. | True | | CLOUD_VERIFY_SSL
+**use_servicenet** | By default your connection to Cloud Files uses the public internet. If you're connecting from a cloud server in the same region, though, you have the option of using the internal **Service Net** network connection, which is not only faster, but does not incur bandwidth charges for transfers within the datacenter. | False | | USE_SERVICENET
Here is a sample:
@@ -206,17 +210,32 @@ As of this writing, Rackspace has three cloud regions in the US: "DFW" (Dallas-F
cs_dfw = pyrax.connect_to_cloudservers(region="DFW")
cs_ord = pyrax.connect_to_cloudservers(region="ORD")
cs_iad = pyrax.connect_to_cloudservers(region="IAD")
- dfw_servers = cs_dfw.servers.list()
- ord_servers = cs_ord.servers.list()
- iad_servers = cs_iad.servers.list()
+ dfw_servers = cs_dfw.list()
+ ord_servers = cs_ord.list()
+ iad_servers = cs_iad.list()
all_servers = dfw_servers + ord_servers + iad_servers
The important point to keep in mind when dealing with multiple regions is that all of pyrax's `connect_to_*` methods take a region parameter, and return a region-specific object. If you do not explicitly include a region, the default region you defined in your config file is used. If you did not define a default region, pyrax defaults to the "DFW" region.
+**Update as of Version 1.8.0**: Pyrax's new [*context objects*](https://github.com/rackspace/pyrax/blob/master/docs/context_objects.md) make it even easier to work with multiple regions. See that document for more in-depth information, but here is the code listed above re-written to use context objects to handle multiple regions:
+
+ import pyrax
+ ctx = pyrax.create_context()
+ ctx.keyring_auth()
+ cs_dfw = ctx.DFW.compute.client
+ cs_ord = ctx.ORD.compute.client
+ cs_iad = ctx.IAD.compute.client
+ dfw_servers = cs_dfw.list()
+ ord_servers = cs_ord.list()
+ iad_servers = cs_iad.list()
+ all_servers = dfw_servers + ord_servers + iad_servers
+
## The `Identity` Class
pyrax has an `Identity` class that is used to handle authentication and cache credentials. You can access it in your code using the reference `pyrax.identity`. Once authenticated, it stores your credentials and authentication token information. In most cases you do not need to interact with this object directly; pyrax uses it to handle authentication tasks for you. But it is available in case you need more fine-grained control of the authentication process, such as querying endpoints in different regions, or getting a list of user roles.
+As of Version 1.8.0 of pyrax, the concept of [**context objects**](https://github.com/rackspace/pyrax/docs/context_objects.md) that encapsulate all of the identity and clients for a given login can be used.
+
You can check its `authenticated` attribute to determine if authentication was successful; if so, its `token` and `expires` attributes contain the returned authentication information, and its `services` attribute contains a dict with all the service endpoint information. Here is an example of the contents of `services` after authentication (with identifying information obscured):
{u'access':
diff --git a/docs/html/____init_____8py.html b/docs/html/____init_____8py.html
index b041f278..ddcab268 100644
--- a/docs/html/____init_____8py.html
+++ b/docs/html/____init_____8py.html
@@ -109,6 +109,8 @@
Returns a list of all available volume types.
+
+
+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.
-
@@ -921,7 +923,7 @@
diff --git a/docs/html/namespacepyrax_1_1version.html b/docs/html/namespacepyrax_1_1version.html
index bcecf64c..047eac96 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/search/all_5f.js b/docs/html/search/all_5f.js
index 24c56cb7..a0a42565 100644
--- a/docs/html/search/all_5f.js
+++ b/docs/html/search/all_5f.js
@@ -4,15 +4,15 @@ var searchData=
['_5f_5fenter_5f_5f',['__enter__',['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#a22042ce061f3dd91228aaa5dd743ae4d',1,'pyrax::utils::SelfDeletingTempfile.__enter__()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#a22042ce061f3dd91228aaa5dd743ae4d',1,'pyrax::utils::SelfDeletingTempDirectory.__enter__()']]],
['_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_1resource_1_1BaseResource.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::resource::BaseResource']]],
- ['_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_1BaseAuth.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseAuth.__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_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_1FakeEntryPoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntryPoint.__init__()'],['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeServiceCatalog.__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_1FakeQueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueMessage.__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_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_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
+ ['_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_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_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_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_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_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 518cfba6..365083e8 100644
--- a/docs/html/search/all_61.js
+++ b/docs/html/search/all_61.js
@@ -18,6 +18,7 @@ var searchData=
['add_5fptr_5frecords',['add_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#af747d2095b106ddb07a528af0e86d7fd',1,'pyrax::clouddns::CloudDNSManager.add_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#af747d2095b106ddb07a528af0e86d7fd',1,'pyrax::clouddns::CloudDNSClient.add_ptr_records()']]],
['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()']]],
['add_5frecords',['add_records',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSDomain.add_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSManager.add_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSClient.add_records()']]],
+ ['add_5frole_5fto_5fuser',['add_role_to_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a3017e849233bc7277435bf85494ae5ba',1,'pyrax::base_identity::BaseIdentity']]],
['add_5fssl_5ftermination',['add_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.add_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.add_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.add_ssl_termination()']]],
['add_5ftag',['add_tag',['../classpyrax_1_1image_1_1Image.html#a1f10628d55bd12b066975a21c58eca32',1,'pyrax::image::Image']]],
['add_5fvirtualip',['add_virtualip',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.add_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.add_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.add_virtualip()']]],
@@ -28,8 +29,9 @@ var searchData=
['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']]],
['ambiguousendpoints',['AmbiguousEndpoints',['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html',1,'pyrax::exceptions']]],
- ['api',['api',['../classpyrax_1_1fakes_1_1FakeManager.html#a20f1ed9e773962332ba30d1affbcd784',1,'pyrax::fakes::FakeManager::api()'],['../classpyrax_1_1manager_1_1BaseManager.html#a6da13b696f737097e0146e47cc0d0985',1,'pyrax::manager::BaseManager::api()']]],
+ ['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']]],
['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']]],
@@ -41,12 +43,13 @@ var searchData=
['att',['att',['../classpyrax_1_1utils_1_1__WaitThread.html#ac356deedcb6c8bb875aaedf10db0a455',1,'pyrax::utils::_WaitThread']]],
['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_1BaseAuth.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseAuth.auth_endpoint'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseAuth.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_1BaseAuth.html#a1fbf2af4f60163ea873bf30e0980839e',1,'pyrax::base_identity::BaseAuth']]],
- ['auth_5fwith_5ftoken',['auth_with_token',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a2323e991798b13063610509c2bb4aaf4',1,'pyrax::base_identity::BaseAuth.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()']]],
- ['authenticate',['authenticate',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::base_identity::BaseAuth.authenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::client::BaseClient.authenticate()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeService.authenticate()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeIdentity.authenticate()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::identity::rax_identity::RaxIdentity.authenticate()'],['../namespacepyrax.html#a14a943d0bb5ce4bcec385d1b733c6544',1,'pyrax.authenticate()']]],
- ['authenticated',['authenticated',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a48f0dc4cf47cd14cdfda7e8495b0a76b',1,'pyrax::base_identity::BaseAuth.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()']]],
+ ['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()']]],
+ ['authenticate',['authenticate',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::base_identity::BaseIdentity.authenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::client::BaseClient.authenticate()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeService.authenticate()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeIdentity.authenticate()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::identity::rax_identity::RaxIdentity.authenticate()'],['../namespacepyrax.html#a14a943d0bb5ce4bcec385d1b733c6544',1,'pyrax.authenticate()']]],
+ ['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()']]],
['authenticationfailed',['AuthenticationFailed',['../classpyrax_1_1exceptions_1_1AuthenticationFailed.html',1,'pyrax::exceptions']]],
['author',['author',['../namespacesetup.html#ab873cebb3b7e47db4fe59837d1aaa210',1,'setup']]],
['author_5femail',['author_email',['../namespacesetup.html#a9b3c5cceb9178d1968dd26e6f147265d',1,'setup']]],
diff --git a/docs/html/search/all_62.js b/docs/html/search/all_62.js
index 9db3bc93..2b9a2281 100644
--- a/docs/html/search/all_62.js
+++ b/docs/html/search/all_62.js
@@ -3,8 +3,8 @@ 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']]],
- ['baseauth',['BaseAuth',['../classpyrax_1_1base__identity_1_1BaseAuth.html',1,'pyrax::base_identity']]],
['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']]],
diff --git a/docs/html/search/all_63.js b/docs/html/search/all_63.js
index d0acf6ba..0f8b3073 100644
--- a/docs/html/search/all_63.js
+++ b/docs/html/search/all_63.js
@@ -27,7 +27,7 @@ var searchData=
['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()']]],
['check_5fcount',['check_count',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html#ad7691a5628dc61210d03d85bb1752829',1,'pyrax::fakes::FakeStatusChanger']]],
- ['check_5ftoken',['check_token',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a89a6ef6961d772a79cba6292b7edf926',1,'pyrax::base_identity::BaseAuth']]],
+ ['check_5ftoken',['check_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a89a6ef6961d772a79cba6292b7edf926',1,'pyrax::base_identity::BaseIdentity']]],
['cidr',['cidr',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a22262d03c6a363b1f41f4dffd3b1c797',1,'pyrax::cloudnetworks::CloudNetwork']]],
['claim',['claim',['../classpyrax_1_1queueing_1_1QueueClaimManager.html#a3135f2c41e736cc621dd7943e9d34189',1,'pyrax::queueing::QueueClaimManager']]],
['claim_5fid',['claim_id',['../classpyrax_1_1queueing_1_1QueueMessage.html#a4fba796dda2883012b75419f84e148ee',1,'pyrax::queueing::QueueMessage']]],
@@ -35,11 +35,14 @@ 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()']]],
+ ['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_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']]],
+ ['client_5fprivate',['client_private',['../classpyrax_1_1base__identity_1_1Endpoint.html#a26acfda338f88ae2cc0e3f83796ddcff',1,'pyrax::base_identity::Endpoint']]],
['clientexception',['ClientException',['../classpyrax_1_1exceptions_1_1ClientException.html',1,'pyrax::exceptions']]],
+ ['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']]],
['cloud_5fdatabases',['cloud_databases',['../namespacepyrax.html#af1a86dab674b703fc06491e66aacadb6',1,'pyrax']]],
['cloud_5fdns',['cloud_dns',['../namespacepyrax.html#acb0f91693d36d52270ed91fd2e919fcc',1,'pyrax']]],
@@ -134,11 +137,12 @@ var searchData=
['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_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_1BaseAuth.html#afb882c0e80402ee17bf29c7af13d2a38',1,'pyrax::base_identity::BaseAuth']]],
- ['create_5fuser',['create_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::base_identity::BaseAuth.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()']]]
+ ['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 1ce2fd92..0a03e800 100644
--- a/docs/html/search/all_64.js
+++ b/docs/html/search/all_64.js
@@ -8,7 +8,7 @@ var searchData=
['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_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()']]],
@@ -41,12 +41,13 @@ var searchData=
['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()']]],
+ ['delete_5frole_5ffrom_5fuser',['delete_role_from_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a2113dca0778c17b587cbaa2c8b202ec6',1,'pyrax::base_identity::BaseIdentity']]],
['delete_5fsession_5fpersistence',['delete_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af0e0d210eb8e8bf69ff5563e18a519ff',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager']]],
['delete_5fsnapshot',['delete_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#ad17401ada26477d78dc6b08c99627544',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['delete_5fssl_5ftermination',['delete_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_ssl_termination()']]],
['delete_5ftag',['delete_tag',['../classpyrax_1_1image_1_1Image.html#a96e553b00de7fc5f5f19fabb983d62dc',1,'pyrax::image::Image']]],
- ['delete_5ftenant',['delete_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a8ee048770360eebc35e35105ca6968f7',1,'pyrax::base_identity::BaseAuth']]],
- ['delete_5fuser',['delete_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::base_identity::BaseAuth.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_user()']]],
+ ['delete_5ftenant',['delete_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a8ee048770360eebc35e35105ca6968f7',1,'pyrax::base_identity::BaseIdentity']]],
+ ['delete_5fuser',['delete_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::base_identity::BaseIdentity.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_user()']]],
['delete_5fvirtualip',['delete_virtualip',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_virtualip()']]],
['delete_5fvolume',['delete_volume',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#ab4d507038522284eb9943c4c3a9b64c6',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['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()']]],
@@ -70,6 +71,7 @@ var searchData=
['domainrecordupdatefailed',['DomainRecordUpdateFailed',['../classpyrax_1_1exceptions_1_1DomainRecordUpdateFailed.html',1,'pyrax::exceptions']]],
['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()']]],
['duplicatequeue',['DuplicateQueue',['../classpyrax_1_1exceptions_1_1DuplicateQueue.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_65.js b/docs/html/search/all_65.js
index 6ad0b415..a6c0b770 100644
--- a/docs/html/search/all_65.js
+++ b/docs/html/search/all_65.js
@@ -2,10 +2,11 @@ var searchData=
[
['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::cf_wrapper::client']]],
['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_1exceptions_1_1AmbiguousEndpoints.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::exceptions::AmbiguousEndpoints']]],
+ ['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',['env',['../namespacepyrax_1_1utils.html#a9790d3a239a8e290bffbeef17c48f017',1,'pyrax::utils']]],
['env_5fdct',['env_dct',['../classpyrax_1_1Settings.html#af10cee202a039548ef1872a4ebfcbaa4',1,'pyrax::Settings']]],
@@ -19,7 +20,7 @@ var searchData=
['exceptions_2epy',['exceptions.py',['../exceptions_8py.html',1,'']]],
['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()']]],
- ['expires',['expires',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac7a7efd7d064c324be145a0e88c25be8',1,'pyrax::base_identity::BaseAuth.expires()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a49192f7cc960a0aab538e014cf449225',1,'pyrax::base_identity::BaseAuth.expires()']]],
+ ['expires',['expires',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a49192f7cc960a0aab538e014cf449225',1,'pyrax::base_identity::BaseIdentity']]],
['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']]],
diff --git a/docs/html/search/all_66.js b/docs/html/search/all_66.js
index 3b37c12e..ef20911b 100644
--- a/docs/html/search/all_66.js
+++ b/docs/html/search/all_66.js
@@ -38,13 +38,13 @@ var searchData=
['fakednsmanager',['FakeDNSManager',['../classpyrax_1_1fakes_1_1FakeDNSManager.html',1,'pyrax::fakes']]],
['fakednsptrrecord',['FakeDNSPTRRecord',['../classpyrax_1_1fakes_1_1FakeDNSPTRRecord.html',1,'pyrax::fakes']]],
['fakednsrecord',['FakeDNSRecord',['../classpyrax_1_1fakes_1_1FakeDNSRecord.html',1,'pyrax::fakes']]],
+ ['fakeendpoint',['FakeEndpoint',['../classpyrax_1_1fakes_1_1FakeEndpoint.html',1,'pyrax::fakes']]],
['fakeentity',['FakeEntity',['../classpyrax_1_1fakes_1_1FakeEntity.html',1,'pyrax::fakes']]],
- ['fakeentrypoint',['FakeEntryPoint',['../classpyrax_1_1fakes_1_1FakeEntryPoint.html',1,'pyrax::fakes']]],
- ['fakeentrypoints',['fakeEntryPoints',['../namespacepyrax_1_1fakes.html#a04b050e4843b30d1d069f97fc0dc7c28',1,'pyrax::fakes']]],
['fakeexception',['FakeException',['../classpyrax_1_1fakes_1_1FakeException.html',1,'pyrax::fakes']]],
['fakefolderuploader',['FakeFolderUploader',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html',1,'pyrax::fakes']]],
['fakeidentity',['FakeIdentity',['../classpyrax_1_1fakes_1_1FakeIdentity.html',1,'pyrax::fakes']]],
['fakeidentityresponse',['FakeIdentityResponse',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html',1,'pyrax::fakes']]],
+ ['fakeidentityservice',['FakeIdentityService',['../classpyrax_1_1fakes_1_1FakeIdentityService.html',1,'pyrax::fakes']]],
['fakeimage',['FakeImage',['../classpyrax_1_1fakes_1_1FakeImage.html',1,'pyrax::fakes']]],
['fakeimageclient',['FakeImageClient',['../classpyrax_1_1fakes_1_1FakeImageClient.html',1,'pyrax::fakes']]],
['fakeimagemanager',['FakeImageManager',['../classpyrax_1_1fakes_1_1FakeImageManager.html',1,'pyrax::fakes']]],
@@ -61,14 +61,13 @@ var searchData=
['fakequeueclaim',['FakeQueueClaim',['../classpyrax_1_1fakes_1_1FakeQueueClaim.html',1,'pyrax::fakes']]],
['fakequeueclient',['FakeQueueClient',['../classpyrax_1_1fakes_1_1FakeQueueClient.html',1,'pyrax::fakes']]],
['fakequeuemanager',['FakeQueueManager',['../classpyrax_1_1fakes_1_1FakeQueueManager.html',1,'pyrax::fakes']]],
- ['fakequeuemessage',['FakeQueueMessage',['../classpyrax_1_1fakes_1_1FakeQueueMessage.html',1,'pyrax::fakes']]],
+ ['fakeraxidentity',['FakeRaxIdentity',['../classpyrax_1_1fakes_1_1FakeRaxIdentity.html',1,'pyrax::fakes']]],
['fakeresponse',['FakeResponse',['../classpyrax_1_1fakes_1_1FakeResponse.html',1,'pyrax::fakes']]],
['fakes_2epy',['fakes.py',['../fakes_8py.html',1,'']]],
['fakescalinggroup',['FakeScalingGroup',['../classpyrax_1_1fakes_1_1FakeScalingGroup.html',1,'pyrax::fakes']]],
['fakescalinggroupmanager',['FakeScalingGroupManager',['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html',1,'pyrax::fakes']]],
['fakeserver',['FakeServer',['../classpyrax_1_1fakes_1_1FakeServer.html',1,'pyrax::fakes']]],
['fakeservice',['FakeService',['../classpyrax_1_1fakes_1_1FakeService.html',1,'pyrax::fakes']]],
- ['fakeservicecatalog',['FakeServiceCatalog',['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html',1,'pyrax::fakes']]],
['fakestatuschanger',['FakeStatusChanger',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html',1,'pyrax::fakes']]],
['fakestorageobject',['FakeStorageObject',['../classpyrax_1_1fakes_1_1FakeStorageObject.html',1,'pyrax::fakes']]],
['fakevirtualip',['FakeVirtualIP',['../classpyrax_1_1fakes_1_1FakeVirtualIP.html',1,'pyrax::fakes']]],
@@ -84,8 +83,9 @@ var searchData=
['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']]],
['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_5fid',['find_user_by_id',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::identity::rax_identity::RaxIdentity']]],
- ['find_5fuser_5fby_5fname',['find_user_by_name',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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()']]],
['flavor',['flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a0e211f0b0d4eacb53ffb5f68e4e8dd01',1,'pyrax::clouddatabases::CloudDatabaseInstance']]],
['flavornotfound',['FlavorNotFound',['../classpyrax_1_1exceptions_1_1FlavorNotFound.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_67.js b/docs/html/search/all_67.js
index b5ee7816..c2dcaa9b 100644
--- a/docs/html/search/all_67.js
+++ b/docs/html/search/all_67.js
@@ -1,6 +1,6 @@
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_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_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_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']]],
@@ -15,6 +15,7 @@ var searchData=
['get_5fcheck_5ftype',['get_check_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4ec84467f00cf7b6b321984347025d14',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fchecksum',['get_checksum',['../namespacepyrax_1_1utils.html#a9e1881e14792f2c07dd799fd7b9d53d1',1,'pyrax::utils']]],
['get_5fclaim',['get_claim',['../classpyrax_1_1queueing_1_1Queue.html#a015b0e04f4bfd93df60cdb650bed2186',1,'pyrax::queueing::Queue.get_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a015b0e04f4bfd93df60cdb650bed2186',1,'pyrax::queueing::QueueClient.get_claim()']]],
+ ['get_5fclient',['get_client',['../classpyrax_1_1base__identity_1_1Service.html#a67a49a605b39431ff108e5020c480815',1,'pyrax::base_identity::Service.get_client()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a67a49a605b39431ff108e5020c480815',1,'pyrax::base_identity::BaseIdentity.get_client()']]],
['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()']]],
@@ -27,7 +28,7 @@ var searchData=
['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_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_1BaseAuth.html#aa48069d87e240c6f35caed1b76e8cb4e',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_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']]],
@@ -35,7 +36,7 @@ var searchData=
['get_5fentity',['get_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#abcac27d2971fd953186cc9c556e5b6c1',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['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_1BaseAuth.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseAuth']]],
+ ['get_5fextensions',['get_extensions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseIdentity']]],
['get_5fflavor',['get_flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5ef10110fd842db8ecae2798b08bdd5b',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
['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']]],
@@ -73,9 +74,11 @@ var searchData=
['get_5frate_5flimits',['get_rate_limits',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ad8f1598d944faa1ec2370da5aa7ec4b2',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5frecord',['get_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSDomain.get_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSManager.get_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSClient.get_record()']]],
['get_5frecord_5fiterator',['get_record_iterator',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a38d5a3c229056eace4cb75dd89b40f7e',1,'pyrax::clouddns::CloudDNSClient']]],
+ ['get_5frole',['get_role',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a438fffa048a2becaf905dcd8a8d98985',1,'pyrax::base_identity::BaseIdentity']]],
['get_5fserver_5fnetworks',['get_server_networks',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a231e4d06adc0ab3dff9a0960f0a4542e',1,'pyrax::cloudnetworks::CloudNetwork.get_server_networks()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a231e4d06adc0ab3dff9a0960f0a4542e',1,'pyrax::cloudnetworks::CloudNetworkClient.get_server_networks()']]],
['get_5fsession_5fpersistence',['get_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af4f3803b4fa49d7a440977b0c5b5427d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_session_persistence()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#af4f3803b4fa49d7a440977b0c5b5427d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_session_persistence()']]],
['get_5fsetting',['get_setting',['../namespacepyrax.html#a5dbd20ff4ad6c1590c1c4723852763da',1,'pyrax']]],
+ ['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()']]],
@@ -83,15 +86,14 @@ var searchData=
['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_5ftenant',['get_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a5032718366de2e9b6b60077fdf882ce7',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_1BaseAuth.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::base_identity::BaseAuth.get_token()'],['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::fakes::FakeServiceCatalog.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_1BaseAuth.html#aeab174eb893dbbd0e84bfa5101e9e9a1',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_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_1clouddatabases_1_1CloudDatabaseInstance.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseClient.get_user()']]],
- ['get_5fuser_5fcredentials',['get_user_credentials',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a65208fe274391d93c31231f9729f4d49',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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()']]],
['getheaders',['getheaders',['../classpyrax_1_1fakes_1_1FakeResponse.html#a4465d386ec6a1c9c2b769b6926e162c1',1,'pyrax::fakes::FakeResponse']]],
['grant_5fuser_5faccess',['grant_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseUserManager.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseInstance.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseUser.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseClient.grant_user_access()']]],
diff --git a/docs/html/search/all_68.js b/docs/html/search/all_68.js
index 33a56c7a..481c618d 100644
--- a/docs/html/search/all_68.js
+++ b/docs/html/search/all_68.js
@@ -7,7 +7,7 @@ var searchData=
['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_1BaseAuth.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseAuth.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_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_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()']]],
diff --git a/docs/html/search/all_69.js b/docs/html/search/all_69.js
index ca5a2178..b19004ab 100644
--- a/docs/html/search/all_69.js
+++ b/docs/html/search/all_69.js
@@ -1,7 +1,7 @@
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']]],
- ['identity',['identity',['../namespacepyrax.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax']]],
+ ['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']]],
['image',['Image',['../classpyrax_1_1image_1_1Image.html',1,'pyrax::image']]],
diff --git a/docs/html/search/all_6b.js b/docs/html/search/all_6b.js
index ec669403..d6b240e5 100644
--- a/docs/html/search/all_6b.js
+++ b/docs/html/search/all_6b.js
@@ -1,7 +1,7 @@
var searchData=
[
- ['keyring',['keyring',['../namespacepyrax.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax']]],
- ['keyring_5fauth',['keyring_auth',['../namespacepyrax.html#a6b0a7da6189b998c14aad23517c03d1e',1,'pyrax']]],
+ ['keyring',['keyring',['../namespacepyrax.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax.keyring()'],['../namespacepyrax_1_1base__identity.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax::base_identity.keyring()']]],
+ ['keyring_5fauth',['keyring_auth',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a685477d115810b2a8a17d5208498e175',1,'pyrax::base_identity::BaseIdentity.keyring_auth()'],['../namespacepyrax.html#a6b0a7da6189b998c14aad23517c03d1e',1,'pyrax.keyring_auth()']]],
['keyringmodulenotinstalled',['KeyringModuleNotInstalled',['../classpyrax_1_1exceptions_1_1KeyringModuleNotInstalled.html',1,'pyrax::exceptions']]],
['keyringpasswordnotfound',['KeyringPasswordNotFound',['../classpyrax_1_1exceptions_1_1KeyringPasswordNotFound.html',1,'pyrax::exceptions']]],
['keyringusernamemissing',['KeyringUsernameMissing',['../classpyrax_1_1exceptions_1_1KeyringUsernameMissing.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_6c.js b/docs/html/search/all_6c.js
index 0abea30f..b0aeec43 100644
--- a/docs/html/search/all_6c.js
+++ b/docs/html/search/all_6c.js
@@ -13,7 +13,7 @@ var searchData=
['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_5fcredentials',['list_credentials',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a752ff9d933b98fdeb87b51a7409f6d4a',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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']]],
@@ -38,20 +38,20 @@ var searchData=
['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_5ffor_5fuser',['list_roles_for_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#aea771492a5203856177387a1d626fc8b',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_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()']]],
['list_5ftasks',['list_tasks',['../classpyrax_1_1image_1_1ImageClient.html#aa16df548fa1859620a3e9a88147641bd',1,'pyrax::image::ImageClient']]],
- ['list_5ftenants',['list_tenants',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a41a5da9da4ac2bd23d06aa7f7c812da5',1,'pyrax::base_identity::BaseAuth']]],
- ['list_5ftokens',['list_tokens',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a78fe8db041d851787e9e8f401349a16f',1,'pyrax::base_identity::BaseAuth']]],
+ ['list_5ftenants',['list_tenants',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a41a5da9da4ac2bd23d06aa7f7c812da5',1,'pyrax::base_identity::BaseIdentity']]],
+ ['list_5ftokens',['list_tokens',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a78fe8db041d851787e9e8f401349a16f',1,'pyrax::base_identity::BaseIdentity']]],
['list_5ftypes',['list_types',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#abf762ec9acd2eabeb6da95fbf9b6b81c',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.list_types()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#abf762ec9acd2eabeb6da95fbf9b6b81c',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.list_types()']]],
['list_5fuser_5faccess',['list_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseUserManager.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseUser.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseClient.list_user_access()']]],
- ['list_5fusers',['list_users',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::base_identity::BaseAuth.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseClient.list_users()']]],
+ ['list_5fusers',['list_users',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::base_identity::BaseIdentity.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseClient.list_users()']]],
['list_5fwebhooks',['list_webhooks',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroup.list_webhooks()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroupManager.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScalePolicy.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScaleClient.list_webhooks()']]],
- ['load',['load',['../classpyrax_1_1fakes_1_1FakeEntryPoint.html#a34b4d3a01c4a6233a80fcbda3ba28c7f',1,'pyrax::fakes::FakeEntryPoint']]],
['loadbalancers',['loadbalancers',['../classpyrax_1_1fakes_1_1FakeService.html#a287295743073106bcc78bdb30f4d3f37',1,'pyrax::fakes::FakeService']]],
['loaded',['loaded',['../classpyrax_1_1resource_1_1BaseResource.html#ae046be312a3b87c23b3729393f1ab194',1,'pyrax::resource::BaseResource']]]
];
diff --git a/docs/html/search/all_6d.js b/docs/html/search/all_6d.js
index 5798c4e9..46a023c5 100644
--- a/docs/html/search/all_6d.js
+++ b/docs/html/search/all_6d.js
@@ -16,12 +16,12 @@ var searchData=
['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_1BaseAuth.html#a1132703a22def73f131d037165a971aa',1,'pyrax::base_identity::BaseAuth.method_delete()'],['../classpyrax_1_1client_1_1BaseClient.html#a1132703a22def73f131d037165a971aa',1,'pyrax::client::BaseClient.method_delete()']]],
- ['method_5fget',['method_get',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac1f6b6211af6452ff038fbb8a25f4822',1,'pyrax::base_identity::BaseAuth.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_1BaseAuth.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::base_identity::BaseAuth.method_head()'],['../classpyrax_1_1client_1_1BaseClient.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::client::BaseClient.method_head()']]],
- ['method_5fpatch',['method_patch',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::base_identity::BaseAuth.method_patch()'],['../classpyrax_1_1client_1_1BaseClient.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::client::BaseClient.method_patch()']]],
- ['method_5fpost',['method_post',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::base_identity::BaseAuth.method_post()'],['../classpyrax_1_1client_1_1BaseClient.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::client::BaseClient.method_post()']]],
- ['method_5fput',['method_put',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::base_identity::BaseAuth.method_put()'],['../classpyrax_1_1client_1_1BaseClient.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::client::BaseClient.method_put()']]],
+ ['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_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()']]],
+ ['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']]],
['min_5fsize',['MIN_SIZE',['../namespacepyrax_1_1cloudblockstorage.html#aaba5e7c5484ccde364fadc3e6a496b1f',1,'pyrax::cloudblockstorage']]],
['missingauthsettings',['MissingAuthSettings',['../classpyrax_1_1exceptions_1_1MissingAuthSettings.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_6e.js b/docs/html/search/all_6e.js
index 2461ab91..ca9cf5b2 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_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_1FakeEntryPoint.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeEntryPoint::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_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_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_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']]],
@@ -12,11 +12,15 @@ var searchData=
['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']]],
- ['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()']]],
+ ['noclientforservice',['NoClientForService',['../classpyrax_1_1exceptions_1_1NoClientForService.html',1,'pyrax::exceptions']]],
['node',['Node',['../classpyrax_1_1cloudloadbalancers_1_1Node.html',1,'pyrax::cloudloadbalancers']]],
+ ['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()']]],
+ ['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']]],
['noreloaderror',['NoReloadError',['../classpyrax_1_1exceptions_1_1NoReloadError.html',1,'pyrax::exceptions']]],
['nosslterminationconfiguration',['NoSSLTerminationConfiguration',['../classpyrax_1_1exceptions_1_1NoSSLTerminationConfiguration.html',1,'pyrax::exceptions']]],
+ ['nosuchclient',['NoSuchClient',['../classpyrax_1_1exceptions_1_1NoSuchClient.html',1,'pyrax::exceptions']]],
['nosuchcontainer',['NoSuchContainer',['../classpyrax_1_1exceptions_1_1NoSuchContainer.html',1,'pyrax::exceptions']]],
['nosuchdatabase',['NoSuchDatabase',['../classpyrax_1_1exceptions_1_1NoSuchDatabase.html',1,'pyrax::exceptions']]],
['nosuchdatabaseuser',['NoSuchDatabaseUser',['../classpyrax_1_1exceptions_1_1NoSuchDatabaseUser.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/all_70.js b/docs/html/search/all_70.js
index 786ac40b..9f058b8f 100644
--- a/docs/html/search/all_70.js
+++ b/docs/html/search/all_70.js
@@ -23,7 +23,7 @@ var searchData=
['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']]],
['parent',['parent',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a457d913bff1ebc8671c1eca1c9d5fc03',1,'pyrax::cloudloadbalancers::Node.parent()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#a457d913bff1ebc8671c1eca1c9d5fc03',1,'pyrax::cloudloadbalancers::VirtualIP.parent()']]],
- ['password',['password',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac0d6a26a6e1c25921ff65ba7790ee92d',1,'pyrax::base_identity::BaseAuth.password()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::base_identity::BaseAuth.password()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::fakes::FakeIdentity.password()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::identity::rax_identity::RaxIdentity.password()']]],
+ ['password',['password',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::base_identity::BaseIdentity.password()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::fakes::FakeIdentity.password()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::identity::rax_identity::RaxIdentity.password()']]],
['password_5fset',['password_set',['../classpyrax_1_1fakes_1_1FakeKeyring.html#aa78ba13375646962adcae163c77385f1',1,'pyrax::fakes::FakeKeyring']]],
['passwordchangefailed',['PasswordChangeFailed',['../classpyrax_1_1exceptions_1_1PasswordChangeFailed.html',1,'pyrax::exceptions']]],
['path',['path',['../namespacepyrax_1_1identity.html#ae6fc00af7c5b5a7c5f40ce6dc6b47d85',1,'pyrax::identity']]],
@@ -35,7 +35,9 @@ var searchData=
['policy_5fcount',['policy_count',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a221c84e10c0ca6bc4f240b139076bf4d',1,'pyrax::autoscale::ScalingGroup']]],
['port',['port',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#af8fb0f45ee0195c7422a49e6a8d72369',1,'pyrax::cloudloadbalancers::Node.port()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#af8fb0f45ee0195c7422a49e6a8d72369',1,'pyrax::fakes::FakeLoadBalancer.port()']]],
['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()']]],
+ ['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']]],
['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']]],
@@ -44,6 +46,7 @@ var searchData=
['ptrrecorddeletionfailed',['PTRRecordDeletionFailed',['../classpyrax_1_1exceptions_1_1PTRRecordDeletionFailed.html',1,'pyrax::exceptions']]],
['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']]],
['pyfiles',['pyfiles',['../namespacepyrax_1_1identity.html#a9a780698de2669d7e87e1af026aebf2a',1,'pyrax::identity']]],
diff --git a/docs/html/search/all_72.js b/docs/html/search/all_72.js
index 9f44232e..5849a37b 100644
--- a/docs/html/search/all_72.js
+++ b/docs/html/search/all_72.js
@@ -8,9 +8,9 @@ var searchData=
['read_5fconfig',['read_config',['../classpyrax_1_1Settings.html#a53943930dc298ed49aa0950b4898bb65',1,'pyrax::Settings']]],
['reason',['reason',['../classpyrax_1_1fakes_1_1FakeResponse.html#a5841dcdf2d3ce6b320e3b4c6ee7f946a',1,'pyrax::fakes::FakeResponse']]],
['recordresultsiterator',['RecordResultsIterator',['../classpyrax_1_1clouddns_1_1RecordResultsIterator.html',1,'pyrax::clouddns']]],
- ['region',['region',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::BaseAuth']]],
+ ['region',['region',['../classpyrax_1_1base__identity_1_1Endpoint.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::Endpoint.region()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::BaseIdentity.region()']]],
['region_5fname',['region_name',['../classpyrax_1_1client_1_1BaseClient.html#a326b5b91b887c67a677e2eb509b569b6',1,'pyrax::client::BaseClient']]],
- ['regions',['regions',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a4c4786354df7358bf12c3c65069dd8b7',1,'pyrax::base_identity::BaseAuth.regions()'],['../namespacepyrax.html#a2b45bebec67926b49ea55f14eb0b8f8e',1,'pyrax.regions()']]],
+ ['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']]],
@@ -26,6 +26,7 @@ var searchData=
['request',['request',['../classpyrax_1_1client_1_1BaseClient.html#a7ea72716d3813b3d175a880ff91eca73',1,'pyrax::client::BaseClient.request()'],['../namespacepyrax_1_1http.html#a536ae30728ad8602e4f37221bd6b92c5',1,'pyrax::http.request()']]],
['request_5fid',['request_id',['../classpyrax_1_1exceptions_1_1ClientException.html#a24b613add05b03f7af1be9c4dab66d59',1,'pyrax::exceptions::ClientException']]],
['required_5ffield_5fnames',['required_field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#a6962c65252e3f5bfc1c2084ce219cd68',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]],
+ ['reset_5fapi_5fkey',['reset_api_key',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab24029edab02dc3a2aafe0b0cddd28f7',1,'pyrax::base_identity::BaseIdentity.reset_api_key()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab24029edab02dc3a2aafe0b0cddd28f7',1,'pyrax::identity::rax_identity::RaxIdentity.reset_api_key()']]],
['reset_5ftimings',['reset_timings',['../classpyrax_1_1client_1_1BaseClient.html#ac8ac904919fa009e510cc25731bc20f8',1,'pyrax::client::BaseClient']]],
['resize',['resize',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseVolume.resize()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseInstance.resize()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseClient.resize()']]],
['resize_5fvolume',['resize_volume',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a184e71e943f21eaf224c511df2b58262',1,'pyrax::clouddatabases::CloudDatabaseInstance']]],
@@ -40,8 +41,10 @@ var searchData=
['resultsiterator',['ResultsIterator',['../classpyrax_1_1clouddns_1_1ResultsIterator.html',1,'pyrax::clouddns']]],
['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_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()']]],
diff --git a/docs/html/search/all_73.js b/docs/html/search/all_73.js
index 856f0d93..9b0ea99a 100644
--- a/docs/html/search/all_73.js
+++ b/docs/html/search/all_73.js
@@ -1,6 +1,7 @@
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']]],
@@ -10,13 +11,18 @@ var searchData=
['serverclientexception',['ServerClientException',['../namespacepyrax_1_1exceptions.html#a033b7e579f64b8616b8c34e2406e24d7',1,'pyrax::exceptions']]],
['servernotfound',['ServerNotFound',['../namespacepyrax_1_1exceptions.html#aa7887bc0806ad489b281e31ec228dcc3',1,'pyrax::exceptions']]],
['servers',['servers',['../classpyrax_1_1fakes_1_1FakeCSClient.html#af71474b240d7b489a9faab57df2218d6',1,'pyrax::fakes::FakeCSClient']]],
+ ['service',['Service',['../classpyrax_1_1base__identity_1_1Service.html',1,'pyrax::base_identity']]],
+ ['service',['service',['../classpyrax_1_1base__identity_1_1Endpoint.html#a552922e811100ffe52478cfa0320e980',1,'pyrax::base_identity::Endpoint']]],
+ ['service_5fcatalog',['service_catalog',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a83c5f5e2d286366b53226d42868654f2',1,'pyrax::base_identity::BaseIdentity']]],
['service_5fcatalog_2epy',['service_catalog.py',['../service__catalog_8py.html',1,'']]],
+ ['service_5fmapping',['service_mapping',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aaf52964abd8d35e156ba075e63d02b5a',1,'pyrax::base_identity::BaseIdentity']]],
['service_5fname',['service_name',['../classpyrax_1_1client_1_1BaseClient.html#ad71253c9267916c12cb3b7521e588151',1,'pyrax::client::BaseClient']]],
['service_5fnet_5fid',['SERVICE_NET_ID',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a9ce6e9ad2518e648b379835f34a579ca',1,'pyrax::cloudnetworks::CloudNetworkClient.SERVICE_NET_ID()'],['../namespacepyrax_1_1cloudnetworks.html#a5c62116f0587043d67f22717c26a88f5',1,'pyrax::cloudnetworks.SERVICE_NET_ID()']]],
+ ['service_5ftype',['service_type',['../classpyrax_1_1base__identity_1_1Service.html#a4613550f73f11538014f2c577af27bc3',1,'pyrax::base_identity::Service.service_type()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#a4613550f73f11538014f2c577af27bc3',1,'pyrax::fakes::FakeIdentityService.service_type()']]],
['servicecatalog',['ServiceCatalog',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html',1,'pyrax::service_catalog']]],
['servicenotavailable',['ServiceNotAvailable',['../classpyrax_1_1exceptions_1_1ServiceNotAvailable.html',1,'pyrax::exceptions']]],
['serviceresponsefailure',['ServiceResponseFailure',['../classpyrax_1_1exceptions_1_1ServiceResponseFailure.html',1,'pyrax::exceptions']]],
- ['services',['services',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::base_identity::BaseAuth.services()'],['../namespacepyrax.html#af615dc60ad41afcddd9dfa11de351b5c',1,'pyrax.services()']]],
+ ['services',['services',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::base_identity::BaseIdentity.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']]],
@@ -27,8 +33,8 @@ var searchData=
['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_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_1BaseAuth.html#a31357d099c87594b661d674bb12a56c0',1,'pyrax::base_identity::BaseAuth.set_credential_file()'],['../namespacepyrax.html#a7375be0702b4c4322b674eaf94795c19',1,'pyrax.set_credential_file()']]],
- ['set_5fcredentials',['set_credentials',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::base_identity::BaseAuth.set_credentials()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
+ ['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()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
['set_5fdefault_5fregion',['set_default_region',['../namespacepyrax.html#a5fb3ef963e598bfc25617161b2f2e4df',1,'pyrax']]],
['set_5fdelay',['set_delay',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a13d1c3a88953a8923813b7d253010dd0',1,'pyrax::clouddns::CloudDNSClient']]],
['set_5fenvironment',['set_environment',['../namespacepyrax.html#a083408c25f486a8aa2fab4a17a587f26',1,'pyrax']]],
diff --git a/docs/html/search/all_74.js b/docs/html/search/all_74.js
index 681dc683..bfc66827 100644
--- a/docs/html/search/all_74.js
+++ b/docs/html/search/all_74.js
@@ -1,8 +1,8 @@
var searchData=
[
['tenant',['Tenant',['../classpyrax_1_1base__identity_1_1Tenant.html',1,'pyrax::base_identity']]],
- ['tenant_5fid',['tenant_id',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ab2a0abf5d1b1c41d8e6a948bbd484341',1,'pyrax::base_identity::BaseAuth.tenant_id()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::BaseAuth.tenant_id()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::fakes::FakeIdentity.tenant_id()']]],
- ['tenant_5fname',['tenant_name',['../classpyrax_1_1base__identity_1_1BaseAuth.html#acff4040d09342f645146af9d59268bb7',1,'pyrax::base_identity::BaseAuth.tenant_name()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::base_identity::BaseAuth.tenant_name()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::fakes::FakeIdentity.tenant_name()']]],
+ ['tenant_5fid',['tenant_id',['../classpyrax_1_1base__identity_1_1Endpoint.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::Endpoint.tenant_id()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::BaseIdentity.tenant_id()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::fakes::FakeIdentity.tenant_id()']]],
+ ['tenant_5fname',['tenant_name',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::base_identity::BaseIdentity.tenant_name()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::fakes::FakeIdentity.tenant_name()']]],
['tenantnotfound',['TenantNotFound',['../classpyrax_1_1exceptions_1_1TenantNotFound.html',1,'pyrax::exceptions']]],
['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()']]],
['testing_5frequires',['testing_requires',['../namespacesetup.html#a969980742bd642ab510b23eaf8534d0d',1,'setup']]],
@@ -11,7 +11,7 @@ var searchData=
['timings',['timings',['../classpyrax_1_1client_1_1BaseClient.html#a941dfe76ad38cb3692eac6ef7f0aec9b',1,'pyrax::client::BaseClient']]],
['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_1BaseAuth.html#a623ef6987ef3bd185c07b28b13e46d34',1,'pyrax::base_identity::BaseAuth.token()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::base_identity::BaseAuth.token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::fakes::FakeIdentity::token()']]],
+ ['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()']]],
diff --git a/docs/html/search/all_75.js b/docs/html/search/all_75.js
index 40123a8d..f2e5b748 100644
--- a/docs/html/search/all_75.js
+++ b/docs/html/search/all_75.js
@@ -2,12 +2,12 @@ var searchData=
[
['unattachednode',['UnattachedNode',['../classpyrax_1_1exceptions_1_1UnattachedNode.html',1,'pyrax::exceptions']]],
['unattachedvirtualip',['UnattachedVirtualIP',['../classpyrax_1_1exceptions_1_1UnattachedVirtualIP.html',1,'pyrax::exceptions']]],
- ['unauthenticate',['unauthenticate',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::base_identity::BaseAuth.unauthenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::client::BaseClient.unauthenticate()']]],
+ ['unauthenticate',['unauthenticate',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::base_identity::BaseIdentity.unauthenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::client::BaseClient.unauthenticate()']]],
['unauthenticated',['unauthenticated',['../namespacepyrax_1_1utils.html#a662924ed2118b3ba66f1d1521a7c2b40',1,'pyrax::utils']]],
['unauthorized',['Unauthorized',['../classpyrax_1_1exceptions_1_1Unauthorized.html',1,'pyrax::exceptions']]],
['unicodepatherror',['UnicodePathError',['../classpyrax_1_1exceptions_1_1UnicodePathError.html',1,'pyrax::exceptions']]],
['unsharableimage',['UnsharableImage',['../classpyrax_1_1exceptions_1_1UnsharableImage.html',1,'pyrax::exceptions']]],
- ['update',['update',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroup.update()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroupManager.update()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScalePolicy.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleWebhook.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleClient.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUserManager.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUser.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSRecord.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSDomain.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::Node.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorCheck.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorNotification.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.update()'],['../classpyrax_1_1image_1_1Image.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::Image.update()'],['../classpyrax_1_1image_1_1ImageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageManager.update()'],['../classpyrax_1_1image_1_1ImageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageClient.update()'],['../classpyrax_1_1queueing_1_1QueueClaimManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::queueing::QueueClaimManager.update()']]],
+ ['update',['update',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroup.update()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroupManager.update()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScalePolicy.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleWebhook.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleClient.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUserManager.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUser.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSRecord.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSDomain.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::Node.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorCheck.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorNotification.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.update()'],['../classpyrax_1_1image_1_1Image.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::Image.update()'],['../classpyrax_1_1image_1_1ImageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageManager.update()'],['../classpyrax_1_1image_1_1ImageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageClient.update()'],['../classpyrax_1_1queueing_1_1QueueClaimManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::queueing::QueueClaimManager.update()']]],
['update_5falarm',['update_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.update_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorClient.update_alarm()']]],
['update_5fcheck',['update_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a31db8ea7ae986d187cad68055d066a20',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.update_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a31db8ea7ae986d187cad68055d066a20',1,'pyrax::cloudmonitoring::CloudMonitorClient.update_check()']]],
['update_5fclaim',['update_claim',['../classpyrax_1_1queueing_1_1Queue.html#ac20bf3b335c30af755690d5d618b5d1e',1,'pyrax::queueing::Queue.update_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#ac20bf3b335c30af755690d5d618b5d1e',1,'pyrax::queueing::QueueClient.update_claim()']]],
@@ -24,9 +24,10 @@ var searchData=
['update_5fpolicy',['update_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::ScalingGroup.update_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::ScalingGroupManager.update_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::AutoScaleClient.update_policy()']]],
['update_5fptr_5frecord',['update_ptr_record',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#adb65ca014db6a16bb4c43d31087ae844',1,'pyrax::clouddns::CloudDNSManager.update_ptr_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#adb65ca014db6a16bb4c43d31087ae844',1,'pyrax::clouddns::CloudDNSClient.update_ptr_record()']]],
['update_5frecord',['update_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSDomain.update_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSManager.update_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSClient.update_record()']]],
+ ['update_5fsnapshot',['update_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#aaadd800ff1d2b105b80d9744b73475c4',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['update_5fssl_5ftermination',['update_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update_ssl_termination()']]],
- ['update_5ftenant',['update_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a25f2b401ee3068816e774d648abd83de',1,'pyrax::base_identity::BaseAuth']]],
- ['update_5fuser',['update_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::base_identity::BaseAuth.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_5ftenant',['update_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a25f2b401ee3068816e774d648abd83de',1,'pyrax::base_identity::BaseIdentity']]],
+ ['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()']]],
@@ -37,12 +38,12 @@ var searchData=
['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_5ffor',['url_for',['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::fakes::FakeServiceCatalog.url_for()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::service_catalog::ServiceCatalog.url_for()']]],
+ ['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_1BaseAuth.html#a5cc32e366c87c4cb49e4309b75f57d64',1,'pyrax::base_identity::BaseAuth']]],
['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_1BaseAuth.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::base_identity::BaseAuth.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()']]],
- ['username',['username',['../classpyrax_1_1base__identity_1_1BaseAuth.html#aad02f271a6536fa078c6d1369ffdadc4',1,'pyrax::base_identity::BaseAuth::username()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::base_identity::BaseAuth::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()']]],
+ ['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()']]],
+ ['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']]],
['utils_2epy',['utils.py',['../utils_8py.html',1,'']]]
diff --git a/docs/html/search/all_76.js b/docs/html/search/all_76.js
index 57741251..e4af35d4 100644
--- a/docs/html/search/all_76.js
+++ b/docs/html/search/all_76.js
@@ -1,7 +1,7 @@
var searchData=
[
['verbose',['verbose',['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread']]],
- ['verify_5fssl',['verify_ssl',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::base_identity::BaseAuth.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()']]],
+ ['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,'']]],
['version_5ftext',['version_text',['../namespacesetup.html#a8cca3ee1b7da971e256b2d0147f9329a',1,'setup']]],
diff --git a/docs/html/search/classes_62.js b/docs/html/search/classes_62.js
index ae027290..41a2c440 100644
--- a/docs/html/search/classes_62.js
+++ b/docs/html/search/classes_62.js
@@ -1,8 +1,8 @@
var searchData=
[
['badrequest',['BadRequest',['../classpyrax_1_1exceptions_1_1BadRequest.html',1,'pyrax::exceptions']]],
- ['baseauth',['BaseAuth',['../classpyrax_1_1base__identity_1_1BaseAuth.html',1,'pyrax::base_identity']]],
['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']]],
diff --git a/docs/html/search/classes_64.js b/docs/html/search/classes_64.js
index d0be0d79..c104efc7 100644
--- a/docs/html/search/classes_64.js
+++ b/docs/html/search/classes_64.js
@@ -11,6 +11,7 @@ var searchData=
['domainrecordupdatefailed',['DomainRecordUpdateFailed',['../classpyrax_1_1exceptions_1_1DomainRecordUpdateFailed.html',1,'pyrax::exceptions']]],
['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']]],
['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/classes_65.js b/docs/html/search/classes_65.js
index 58463c03..d637e212 100644
--- a/docs/html/search/classes_65.js
+++ b/docs/html/search/classes_65.js
@@ -1,5 +1,6 @@
var searchData=
[
+ ['endpoint',['Endpoint',['../classpyrax_1_1base__identity_1_1Endpoint.html',1,'pyrax::base_identity']]],
['endpointnotdefined',['EndpointNotDefined',['../classpyrax_1_1exceptions_1_1EndpointNotDefined.html',1,'pyrax::exceptions']]],
['endpointnotfound',['EndpointNotFound',['../classpyrax_1_1exceptions_1_1EndpointNotFound.html',1,'pyrax::exceptions']]],
['environmentnotfound',['EnvironmentNotFound',['../classpyrax_1_1exceptions_1_1EnvironmentNotFound.html',1,'pyrax::exceptions']]]
diff --git a/docs/html/search/classes_66.js b/docs/html/search/classes_66.js
index d2b2cd5c..27a36eea 100644
--- a/docs/html/search/classes_66.js
+++ b/docs/html/search/classes_66.js
@@ -28,12 +28,13 @@ var searchData=
['fakednsmanager',['FakeDNSManager',['../classpyrax_1_1fakes_1_1FakeDNSManager.html',1,'pyrax::fakes']]],
['fakednsptrrecord',['FakeDNSPTRRecord',['../classpyrax_1_1fakes_1_1FakeDNSPTRRecord.html',1,'pyrax::fakes']]],
['fakednsrecord',['FakeDNSRecord',['../classpyrax_1_1fakes_1_1FakeDNSRecord.html',1,'pyrax::fakes']]],
+ ['fakeendpoint',['FakeEndpoint',['../classpyrax_1_1fakes_1_1FakeEndpoint.html',1,'pyrax::fakes']]],
['fakeentity',['FakeEntity',['../classpyrax_1_1fakes_1_1FakeEntity.html',1,'pyrax::fakes']]],
- ['fakeentrypoint',['FakeEntryPoint',['../classpyrax_1_1fakes_1_1FakeEntryPoint.html',1,'pyrax::fakes']]],
['fakeexception',['FakeException',['../classpyrax_1_1fakes_1_1FakeException.html',1,'pyrax::fakes']]],
['fakefolderuploader',['FakeFolderUploader',['../classpyrax_1_1fakes_1_1FakeFolderUploader.html',1,'pyrax::fakes']]],
['fakeidentity',['FakeIdentity',['../classpyrax_1_1fakes_1_1FakeIdentity.html',1,'pyrax::fakes']]],
['fakeidentityresponse',['FakeIdentityResponse',['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html',1,'pyrax::fakes']]],
+ ['fakeidentityservice',['FakeIdentityService',['../classpyrax_1_1fakes_1_1FakeIdentityService.html',1,'pyrax::fakes']]],
['fakeimage',['FakeImage',['../classpyrax_1_1fakes_1_1FakeImage.html',1,'pyrax::fakes']]],
['fakeimageclient',['FakeImageClient',['../classpyrax_1_1fakes_1_1FakeImageClient.html',1,'pyrax::fakes']]],
['fakeimagemanager',['FakeImageManager',['../classpyrax_1_1fakes_1_1FakeImageManager.html',1,'pyrax::fakes']]],
@@ -50,13 +51,12 @@ var searchData=
['fakequeueclaim',['FakeQueueClaim',['../classpyrax_1_1fakes_1_1FakeQueueClaim.html',1,'pyrax::fakes']]],
['fakequeueclient',['FakeQueueClient',['../classpyrax_1_1fakes_1_1FakeQueueClient.html',1,'pyrax::fakes']]],
['fakequeuemanager',['FakeQueueManager',['../classpyrax_1_1fakes_1_1FakeQueueManager.html',1,'pyrax::fakes']]],
- ['fakequeuemessage',['FakeQueueMessage',['../classpyrax_1_1fakes_1_1FakeQueueMessage.html',1,'pyrax::fakes']]],
+ ['fakeraxidentity',['FakeRaxIdentity',['../classpyrax_1_1fakes_1_1FakeRaxIdentity.html',1,'pyrax::fakes']]],
['fakeresponse',['FakeResponse',['../classpyrax_1_1fakes_1_1FakeResponse.html',1,'pyrax::fakes']]],
['fakescalinggroup',['FakeScalingGroup',['../classpyrax_1_1fakes_1_1FakeScalingGroup.html',1,'pyrax::fakes']]],
['fakescalinggroupmanager',['FakeScalingGroupManager',['../classpyrax_1_1fakes_1_1FakeScalingGroupManager.html',1,'pyrax::fakes']]],
['fakeserver',['FakeServer',['../classpyrax_1_1fakes_1_1FakeServer.html',1,'pyrax::fakes']]],
['fakeservice',['FakeService',['../classpyrax_1_1fakes_1_1FakeService.html',1,'pyrax::fakes']]],
- ['fakeservicecatalog',['FakeServiceCatalog',['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html',1,'pyrax::fakes']]],
['fakestatuschanger',['FakeStatusChanger',['../classpyrax_1_1fakes_1_1FakeStatusChanger.html',1,'pyrax::fakes']]],
['fakestorageobject',['FakeStorageObject',['../classpyrax_1_1fakes_1_1FakeStorageObject.html',1,'pyrax::fakes']]],
['fakevirtualip',['FakeVirtualIP',['../classpyrax_1_1fakes_1_1FakeVirtualIP.html',1,'pyrax::fakes']]],
diff --git a/docs/html/search/classes_6e.js b/docs/html/search/classes_6e.js
index fac342e8..34ea90cc 100644
--- a/docs/html/search/classes_6e.js
+++ b/docs/html/search/classes_6e.js
@@ -6,10 +6,14 @@ 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']]],
+ ['noclientforservice',['NoClientForService',['../classpyrax_1_1exceptions_1_1NoClientForService.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']]],
['nomoreresults',['NoMoreResults',['../classpyrax_1_1exceptions_1_1NoMoreResults.html',1,'pyrax::exceptions']]],
['noreloaderror',['NoReloadError',['../classpyrax_1_1exceptions_1_1NoReloadError.html',1,'pyrax::exceptions']]],
['nosslterminationconfiguration',['NoSSLTerminationConfiguration',['../classpyrax_1_1exceptions_1_1NoSSLTerminationConfiguration.html',1,'pyrax::exceptions']]],
+ ['nosuchclient',['NoSuchClient',['../classpyrax_1_1exceptions_1_1NoSuchClient.html',1,'pyrax::exceptions']]],
['nosuchcontainer',['NoSuchContainer',['../classpyrax_1_1exceptions_1_1NoSuchContainer.html',1,'pyrax::exceptions']]],
['nosuchdatabase',['NoSuchDatabase',['../classpyrax_1_1exceptions_1_1NoSuchDatabase.html',1,'pyrax::exceptions']]],
['nosuchdatabaseuser',['NoSuchDatabaseUser',['../classpyrax_1_1exceptions_1_1NoSuchDatabaseUser.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/classes_72.js b/docs/html/search/classes_72.js
index 676fd6e7..cca5a973 100644
--- a/docs/html/search/classes_72.js
+++ b/docs/html/search/classes_72.js
@@ -2,5 +2,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_1clouddns_1_1ResultsIterator.html',1,'pyrax::clouddns']]],
+ ['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 6570419f..f4fc888a 100644
--- a/docs/html/search/classes_73.js
+++ b/docs/html/search/classes_73.js
@@ -4,6 +4,7 @@ var searchData=
['scalinggroupmanager',['ScalingGroupManager',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html',1,'pyrax::autoscale']]],
['selfdeletingtempdirectory',['SelfDeletingTempDirectory',['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html',1,'pyrax::utils']]],
['selfdeletingtempfile',['SelfDeletingTempfile',['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html',1,'pyrax::utils']]],
+ ['service',['Service',['../classpyrax_1_1base__identity_1_1Service.html',1,'pyrax::base_identity']]],
['servicecatalog',['ServiceCatalog',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html',1,'pyrax::service_catalog']]],
['servicenotavailable',['ServiceNotAvailable',['../classpyrax_1_1exceptions_1_1ServiceNotAvailable.html',1,'pyrax::exceptions']]],
['serviceresponsefailure',['ServiceResponseFailure',['../classpyrax_1_1exceptions_1_1ServiceResponseFailure.html',1,'pyrax::exceptions']]],
diff --git a/docs/html/search/functions_5f.js b/docs/html/search/functions_5f.js
index b9a9e444..e453ea0e 100644
--- a/docs/html/search/functions_5f.js
+++ b/docs/html/search/functions_5f.js
@@ -3,11 +3,11 @@ var searchData=
['_5f_5fenter_5f_5f',['__enter__',['../classpyrax_1_1utils_1_1SelfDeletingTempfile.html#a22042ce061f3dd91228aaa5dd743ae4d',1,'pyrax::utils::SelfDeletingTempfile.__enter__()'],['../classpyrax_1_1utils_1_1SelfDeletingTempDirectory.html#a22042ce061f3dd91228aaa5dd743ae4d',1,'pyrax::utils::SelfDeletingTempDirectory.__enter__()']]],
['_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_1resource_1_1BaseResource.html#a0a990b3ec3889d40889daca9ee5e4695',1,'pyrax::resource::BaseResource']]],
- ['_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_1BaseAuth.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::base_identity::BaseAuth.__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_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_1FakeEntryPoint.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeEntryPoint.__init__()'],['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeServiceCatalog.__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_1FakeQueueMessage.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::fakes::FakeQueueMessage.__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_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_1__WaitThread.html#ac775ee34451fdfa742b318538164070e',1,'pyrax::utils::_WaitThread.__init__()']]],
+ ['_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_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_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_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_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 48d55962..e05f06fb 100644
--- a/docs/html/search/functions_61.js
+++ b/docs/html/search/functions_61.js
@@ -14,6 +14,7 @@ var searchData=
['add_5fpolicy',['add_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a49744d3c8bab4cac387f77c5499ab639',1,'pyrax::autoscale::ScalingGroup.add_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a49744d3c8bab4cac387f77c5499ab639',1,'pyrax::autoscale::ScalingGroupManager.add_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a49744d3c8bab4cac387f77c5499ab639',1,'pyrax::autoscale::AutoScaleClient.add_policy()']]],
['add_5fptr_5frecords',['add_ptr_records',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#af747d2095b106ddb07a528af0e86d7fd',1,'pyrax::clouddns::CloudDNSManager.add_ptr_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#af747d2095b106ddb07a528af0e86d7fd',1,'pyrax::clouddns::CloudDNSClient.add_ptr_records()']]],
['add_5frecords',['add_records',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSDomain.add_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSManager.add_records()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#abf676b7d485de10f8409a7904a0a8018',1,'pyrax::clouddns::CloudDNSClient.add_records()']]],
+ ['add_5frole_5fto_5fuser',['add_role_to_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a3017e849233bc7277435bf85494ae5ba',1,'pyrax::base_identity::BaseIdentity']]],
['add_5fssl_5ftermination',['add_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.add_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.add_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a66334c0c0a712389d1c0a3d1e43cbf98',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.add_ssl_termination()']]],
['add_5ftag',['add_tag',['../classpyrax_1_1image_1_1Image.html#a1f10628d55bd12b066975a21c58eca32',1,'pyrax::image::Image']]],
['add_5fvirtualip',['add_virtualip',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.add_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.add_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#ab264d37d545101c96e50d1e2924724cc',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.add_virtualip()']]],
@@ -30,8 +31,8 @@ var searchData=
['assure_5fsnapshot',['assure_snapshot',['../namespacepyrax_1_1cloudblockstorage.html#a8a930b1066981115404f992adb243aa2',1,'pyrax::cloudblockstorage']]],
['assure_5fvolume',['assure_volume',['../namespacepyrax_1_1cloudblockstorage.html#a68a6bb754146fc1cdfe07a97456d71e9',1,'pyrax::cloudblockstorage']]],
['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()']]],
- ['auth_5fendpoint',['auth_endpoint',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseAuth.auth_endpoint'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a146f36df43eb5ac08c7c7b09bf50d6ed',1,'pyrax::base_identity::BaseAuth.auth_endpoint']]],
- ['auth_5ftoken',['auth_token',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1fbf2af4f60163ea873bf30e0980839e',1,'pyrax::base_identity::BaseAuth']]],
- ['auth_5fwith_5ftoken',['auth_with_token',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a2323e991798b13063610509c2bb4aaf4',1,'pyrax::base_identity::BaseAuth.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()']]],
- ['authenticate',['authenticate',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::base_identity::BaseAuth.authenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::client::BaseClient.authenticate()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeService.authenticate()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeIdentity.authenticate()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::identity::rax_identity::RaxIdentity.authenticate()'],['../namespacepyrax.html#a14a943d0bb5ce4bcec385d1b733c6544',1,'pyrax.authenticate()']]]
+ ['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']]],
+ ['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()']]],
+ ['authenticate',['authenticate',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::base_identity::BaseIdentity.authenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::client::BaseClient.authenticate()'],['../classpyrax_1_1fakes_1_1FakeService.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeService.authenticate()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::fakes::FakeIdentity.authenticate()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ac0665028c611e61881f7e9fd0e752b99',1,'pyrax::identity::rax_identity::RaxIdentity.authenticate()'],['../namespacepyrax.html#a14a943d0bb5ce4bcec385d1b733c6544',1,'pyrax.authenticate()']]]
];
diff --git a/docs/html/search/functions_63.js b/docs/html/search/functions_63.js
index b9cfa7f3..ce38ba47 100644
--- a/docs/html/search/functions_63.js
+++ b/docs/html/search/functions_63.js
@@ -11,11 +11,14 @@ var searchData=
['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()']]],
- ['check_5ftoken',['check_token',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a89a6ef6961d772a79cba6292b7edf926',1,'pyrax::base_identity::BaseAuth']]],
+ ['check_5ftoken',['check_token',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a89a6ef6961d772a79cba6292b7edf926',1,'pyrax::base_identity::BaseIdentity']]],
['claim',['claim',['../classpyrax_1_1queueing_1_1QueueClaimManager.html#a3135f2c41e736cc621dd7943e9d34189',1,'pyrax::queueing::QueueClaimManager']]],
['claim_5fmessages',['claim_messages',['../classpyrax_1_1queueing_1_1Queue.html#a4e661325a97751869d0b9b024bb73d20',1,'pyrax::queueing::Queue.claim_messages()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a4e661325a97751869d0b9b024bb73d20',1,'pyrax::queueing::QueueClient.claim_messages()']]],
['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_1base__identity_1_1Endpoint.html#af38f414f12df8decbc52ff98ed34af5f',1,'pyrax::base_identity::Endpoint']]],
+ ['client_5fclass_5ffor_5fservice',['client_class_for_service',['../namespacepyrax.html#af6b6c4cc8a97fc97da7283dc193d8000',1,'pyrax']]],
+ ['client_5fprivate',['client_private',['../classpyrax_1_1base__identity_1_1Endpoint.html#a26acfda338f88ae2cc0e3f83796ddcff',1,'pyrax::base_identity::Endpoint']]],
['coerce_5fstring_5fto_5flist',['coerce_string_to_list',['../namespacepyrax_1_1utils.html#a399c6b9652f5150282c3edb32d4d05f3',1,'pyrax::utils']]],
['connect_5fto_5fautoscale',['connect_to_autoscale',['../namespacepyrax.html#a1773238b5af2fb51b54754bbe83b2971',1,'pyrax']]],
['connect_5fto_5fcloud_5fblockstorage',['connect_to_cloud_blockstorage',['../namespacepyrax.html#a6028129593635bcde83ac8783a35f55e',1,'pyrax']]],
@@ -38,11 +41,12 @@ var searchData=
['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_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_1BaseAuth.html#afb882c0e80402ee17bf29c7af13d2a38',1,'pyrax::base_identity::BaseAuth']]],
- ['create_5fuser',['create_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#af18e8e2e2ba1d65bb30314133332044d',1,'pyrax::base_identity::BaseAuth.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()']]]
+ ['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 cc3a2c34..fef5ccaf 100644
--- a/docs/html/search/functions_64.js
+++ b/docs/html/search/functions_64.js
@@ -30,12 +30,13 @@ var searchData=
['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()']]],
+ ['delete_5frole_5ffrom_5fuser',['delete_role_from_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a2113dca0778c17b587cbaa2c8b202ec6',1,'pyrax::base_identity::BaseIdentity']]],
['delete_5fsession_5fpersistence',['delete_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af0e0d210eb8e8bf69ff5563e18a519ff',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager']]],
['delete_5fsnapshot',['delete_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#ad17401ada26477d78dc6b08c99627544',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['delete_5fssl_5ftermination',['delete_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a122b3212f2bcd13226d89dcb2e888b34',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_ssl_termination()']]],
['delete_5ftag',['delete_tag',['../classpyrax_1_1image_1_1Image.html#a96e553b00de7fc5f5f19fabb983d62dc',1,'pyrax::image::Image']]],
- ['delete_5ftenant',['delete_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a8ee048770360eebc35e35105ca6968f7',1,'pyrax::base_identity::BaseAuth']]],
- ['delete_5fuser',['delete_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::base_identity::BaseAuth.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_user()']]],
+ ['delete_5ftenant',['delete_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a8ee048770360eebc35e35105ca6968f7',1,'pyrax::base_identity::BaseIdentity']]],
+ ['delete_5fuser',['delete_user',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::base_identity::BaseIdentity.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseInstance.delete_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a254d42e584df57805c2a190b073d28a4',1,'pyrax::clouddatabases::CloudDatabaseClient.delete_user()']]],
['delete_5fvirtualip',['delete_virtualip',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.delete_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.delete_virtualip()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#af5d840b35f43bbc8669b94337555bb81',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.delete_virtualip()']]],
['delete_5fvolume',['delete_volume',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#ab4d507038522284eb9943c4c3a9b64c6',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['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()']]],
diff --git a/docs/html/search/functions_66.js b/docs/html/search/functions_66.js
index 8234c29a..2ae73040 100644
--- a/docs/html/search/functions_66.js
+++ b/docs/html/search/functions_66.js
@@ -9,8 +9,9 @@ var searchData=
['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_5fid',['find_user_by_id',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#adf5de79a326a6b6b6eac3cba7e0b8cfb',1,'pyrax::identity::rax_identity::RaxIdentity']]],
- ['find_5fuser_5fby_5fname',['find_user_by_name',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab0abba97256f91ebca2ded800fcf440d',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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']]],
['folder_5fsize',['folder_size',['../namespacepyrax_1_1utils.html#a44e6cd242f9d12705e157706a6caddfe',1,'pyrax::utils']]],
diff --git a/docs/html/search/functions_67.js b/docs/html/search/functions_67.js
index 55dce8ff..2d066dc5 100644
--- a/docs/html/search/functions_67.js
+++ b/docs/html/search/functions_67.js
@@ -1,6 +1,6 @@
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_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_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_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']]],
@@ -15,6 +15,7 @@ var searchData=
['get_5fcheck_5ftype',['get_check_type',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a4ec84467f00cf7b6b321984347025d14',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['get_5fchecksum',['get_checksum',['../namespacepyrax_1_1utils.html#a9e1881e14792f2c07dd799fd7b9d53d1',1,'pyrax::utils']]],
['get_5fclaim',['get_claim',['../classpyrax_1_1queueing_1_1Queue.html#a015b0e04f4bfd93df60cdb650bed2186',1,'pyrax::queueing::Queue.get_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#a015b0e04f4bfd93df60cdb650bed2186',1,'pyrax::queueing::QueueClient.get_claim()']]],
+ ['get_5fclient',['get_client',['../classpyrax_1_1base__identity_1_1Service.html#a67a49a605b39431ff108e5020c480815',1,'pyrax::base_identity::Service.get_client()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a67a49a605b39431ff108e5020c480815',1,'pyrax::base_identity::BaseIdentity.get_client()']]],
['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()']]],
@@ -27,14 +28,14 @@ var searchData=
['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_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_1BaseAuth.html#aa48069d87e240c6f35caed1b76e8cb4e',1,'pyrax::base_identity::BaseAuth']]],
+ ['get_5fdefault_5fregion',['get_default_region',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aa48069d87e240c6f35caed1b76e8cb4e',1,'pyrax::base_identity::BaseIdentity']]],
['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']]],
['get_5fentity',['get_entity',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#abcac27d2971fd953186cc9c556e5b6c1',1,'pyrax::cloudmonitoring::CloudMonitorClient']]],
['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_1BaseAuth.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseAuth']]],
+ ['get_5fextensions',['get_extensions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab5a28d881fa99dd93c68bc1daf9e6710',1,'pyrax::base_identity::BaseIdentity']]],
['get_5fflavor',['get_flavor',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5ef10110fd842db8ecae2798b08bdd5b',1,'pyrax::clouddatabases::CloudDatabaseClient']]],
['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']]],
@@ -72,9 +73,11 @@ var searchData=
['get_5frate_5flimits',['get_rate_limits',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#ad8f1598d944faa1ec2370da5aa7ec4b2',1,'pyrax::clouddns::CloudDNSClient']]],
['get_5frecord',['get_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSDomain.get_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSManager.get_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#acd6f2e6f8bdc1c8f65d8dffbb6631445',1,'pyrax::clouddns::CloudDNSClient.get_record()']]],
['get_5frecord_5fiterator',['get_record_iterator',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a38d5a3c229056eace4cb75dd89b40f7e',1,'pyrax::clouddns::CloudDNSClient']]],
+ ['get_5frole',['get_role',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a438fffa048a2becaf905dcd8a8d98985',1,'pyrax::base_identity::BaseIdentity']]],
['get_5fserver_5fnetworks',['get_server_networks',['../classpyrax_1_1cloudnetworks_1_1CloudNetwork.html#a231e4d06adc0ab3dff9a0960f0a4542e',1,'pyrax::cloudnetworks::CloudNetwork.get_server_networks()'],['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a231e4d06adc0ab3dff9a0960f0a4542e',1,'pyrax::cloudnetworks::CloudNetworkClient.get_server_networks()']]],
['get_5fsession_5fpersistence',['get_session_persistence',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#af4f3803b4fa49d7a440977b0c5b5427d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.get_session_persistence()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#af4f3803b4fa49d7a440977b0c5b5427d',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.get_session_persistence()']]],
['get_5fsetting',['get_setting',['../namespacepyrax.html#a5dbd20ff4ad6c1590c1c4723852763da',1,'pyrax']]],
+ ['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()']]],
@@ -82,15 +85,14 @@ var searchData=
['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_5ftenant',['get_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a5032718366de2e9b6b60077fdf882ce7',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_1BaseAuth.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::base_identity::BaseAuth.get_token()'],['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#ab99f34de8275c77cf5ff09b1d7d0a04a',1,'pyrax::fakes::FakeServiceCatalog.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_1BaseAuth.html#aeab174eb893dbbd0e84bfa5101e9e9a1',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_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_1clouddatabases_1_1CloudDatabaseInstance.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseInstance.get_user()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a1090fc6dec8ecff76b4f98b2d028401e',1,'pyrax::clouddatabases::CloudDatabaseClient.get_user()']]],
- ['get_5fuser_5fcredentials',['get_user_credentials',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a65208fe274391d93c31231f9729f4d49',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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()']]],
['getheaders',['getheaders',['../classpyrax_1_1fakes_1_1FakeResponse.html#a4465d386ec6a1c9c2b769b6926e162c1',1,'pyrax::fakes::FakeResponse']]],
['grant_5fuser_5faccess',['grant_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseUserManager.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseInstance.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseUser.grant_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a5f0d96262a0ff5432f3f9f0552a1e13f',1,'pyrax::clouddatabases::CloudDatabaseClient.grant_user_access()']]]
diff --git a/docs/html/search/functions_6b.js b/docs/html/search/functions_6b.js
index 67263131..c75420a4 100644
--- a/docs/html/search/functions_6b.js
+++ b/docs/html/search/functions_6b.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['keyring_5fauth',['keyring_auth',['../namespacepyrax.html#a6b0a7da6189b998c14aad23517c03d1e',1,'pyrax']]]
+ ['keyring_5fauth',['keyring_auth',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a685477d115810b2a8a17d5208498e175',1,'pyrax::base_identity::BaseIdentity.keyring_auth()'],['../namespacepyrax.html#a6b0a7da6189b998c14aad23517c03d1e',1,'pyrax.keyring_auth()']]]
];
diff --git a/docs/html/search/functions_6c.js b/docs/html/search/functions_6c.js
index 51ea1f8d..79ff8400 100644
--- a/docs/html/search/functions_6c.js
+++ b/docs/html/search/functions_6c.js
@@ -11,7 +11,7 @@ var searchData=
['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_5fcredentials',['list_credentials',['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a752ff9d933b98fdeb87b51a7409f6d4a',1,'pyrax::identity::rax_identity::RaxIdentity']]],
+ ['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']]],
['list_5fenvironments',['list_environments',['../namespacepyrax.html#aaf4742684739d9a72d01f13093dc9a87',1,'pyrax']]],
@@ -34,18 +34,18 @@ var searchData=
['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_5ffor_5fuser',['list_roles_for_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#aea771492a5203856177387a1d626fc8b',1,'pyrax::base_identity::BaseAuth']]],
+ ['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_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()']]],
['list_5ftasks',['list_tasks',['../classpyrax_1_1image_1_1ImageClient.html#aa16df548fa1859620a3e9a88147641bd',1,'pyrax::image::ImageClient']]],
- ['list_5ftenants',['list_tenants',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a41a5da9da4ac2bd23d06aa7f7c812da5',1,'pyrax::base_identity::BaseAuth']]],
- ['list_5ftokens',['list_tokens',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a78fe8db041d851787e9e8f401349a16f',1,'pyrax::base_identity::BaseAuth']]],
+ ['list_5ftenants',['list_tenants',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a41a5da9da4ac2bd23d06aa7f7c812da5',1,'pyrax::base_identity::BaseIdentity']]],
+ ['list_5ftokens',['list_tokens',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a78fe8db041d851787e9e8f401349a16f',1,'pyrax::base_identity::BaseIdentity']]],
['list_5ftypes',['list_types',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#abf762ec9acd2eabeb6da95fbf9b6b81c',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.list_types()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotificationManager.html#abf762ec9acd2eabeb6da95fbf9b6b81c',1,'pyrax::cloudmonitoring::CloudMonitorNotificationManager.list_types()']]],
['list_5fuser_5faccess',['list_user_access',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseUserManager.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseUser.list_user_access()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a2fb19d440ebd8bffa91bb9245530953f',1,'pyrax::clouddatabases::CloudDatabaseClient.list_user_access()']]],
- ['list_5fusers',['list_users',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::base_identity::BaseAuth.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseClient.list_users()']]],
- ['list_5fwebhooks',['list_webhooks',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroup.list_webhooks()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroupManager.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScalePolicy.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScaleClient.list_webhooks()']]],
- ['load',['load',['../classpyrax_1_1fakes_1_1FakeEntryPoint.html#a34b4d3a01c4a6233a80fcbda3ba28c7f',1,'pyrax::fakes::FakeEntryPoint']]]
+ ['list_5fusers',['list_users',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::base_identity::BaseIdentity.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseInstance.list_users()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a574e940a3d762174b715704b2267f38a',1,'pyrax::clouddatabases::CloudDatabaseClient.list_users()']]],
+ ['list_5fwebhooks',['list_webhooks',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroup.list_webhooks()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::ScalingGroupManager.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScalePolicy.list_webhooks()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#afee49b8fd7dc0cf9aed47e709db7364b',1,'pyrax::autoscale::AutoScaleClient.list_webhooks()']]]
];
diff --git a/docs/html/search/functions_6d.js b/docs/html/search/functions_6d.js
index d235de76..858c07a9 100644
--- a/docs/html/search/functions_6d.js
+++ b/docs/html/search/functions_6d.js
@@ -7,12 +7,12 @@ var searchData=
['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']]],
- ['method_5fdelete',['method_delete',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1132703a22def73f131d037165a971aa',1,'pyrax::base_identity::BaseAuth.method_delete()'],['../classpyrax_1_1client_1_1BaseClient.html#a1132703a22def73f131d037165a971aa',1,'pyrax::client::BaseClient.method_delete()']]],
- ['method_5fget',['method_get',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac1f6b6211af6452ff038fbb8a25f4822',1,'pyrax::base_identity::BaseAuth.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_1BaseAuth.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::base_identity::BaseAuth.method_head()'],['../classpyrax_1_1client_1_1BaseClient.html#a2b66a305940ec13628995f2a93c55b89',1,'pyrax::client::BaseClient.method_head()']]],
- ['method_5fpatch',['method_patch',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::base_identity::BaseAuth.method_patch()'],['../classpyrax_1_1client_1_1BaseClient.html#a8212f8a94b29f7c39e38a9b6d8741322',1,'pyrax::client::BaseClient.method_patch()']]],
- ['method_5fpost',['method_post',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::base_identity::BaseAuth.method_post()'],['../classpyrax_1_1client_1_1BaseClient.html#a248efd43b254ea67d11575531bad3247',1,'pyrax::client::BaseClient.method_post()']]],
- ['method_5fput',['method_put',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::base_identity::BaseAuth.method_put()'],['../classpyrax_1_1client_1_1BaseClient.html#a49de945eec86f955f4ac7d1487dcf286',1,'pyrax::client::BaseClient.method_put()']]],
+ ['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_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()']]],
+ ['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()']]]
diff --git a/docs/html/search/functions_72.js b/docs/html/search/functions_72.js
index 38efaffe..ac33bf9c 100644
--- a/docs/html/search/functions_72.js
+++ b/docs/html/search/functions_72.js
@@ -4,6 +4,7 @@ var searchData=
['random_5funicode',['random_unicode',['../namespacepyrax_1_1utils.html#a22d977f9099b32cca29ae8f2bf85c738',1,'pyrax::utils']]],
['read',['read',['../classpyrax_1_1fakes_1_1FakeResponse.html#afcea8c9091d60bee0f6fb79abb6e1cca',1,'pyrax::fakes::FakeResponse.read()'],['../classpyrax_1_1fakes_1_1FakeIdentityResponse.html#afcea8c9091d60bee0f6fb79abb6e1cca',1,'pyrax::fakes::FakeIdentityResponse.read()']]],
['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']]],
@@ -16,12 +17,14 @@ var searchData=
['replace_5fwebhook',['replace_webhook',['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a652340a0267b6f56e5416b97b367c5fc',1,'pyrax::autoscale::ScalingGroupManager.replace_webhook()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a652340a0267b6f56e5416b97b367c5fc',1,'pyrax::autoscale::AutoScaleClient.replace_webhook()']]],
['request',['request',['../classpyrax_1_1client_1_1BaseClient.html#a7ea72716d3813b3d175a880ff91eca73',1,'pyrax::client::BaseClient.request()'],['../namespacepyrax_1_1http.html#a536ae30728ad8602e4f37221bd6b92c5',1,'pyrax::http.request()']]],
['required_5ffield_5fnames',['required_field_names',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheckType.html#a6962c65252e3f5bfc1c2084ce219cd68',1,'pyrax::cloudmonitoring::CloudMonitorCheckType']]],
+ ['reset_5fapi_5fkey',['reset_api_key',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#ab24029edab02dc3a2aafe0b0cddd28f7',1,'pyrax::base_identity::BaseIdentity.reset_api_key()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#ab24029edab02dc3a2aafe0b0cddd28f7',1,'pyrax::identity::rax_identity::RaxIdentity.reset_api_key()']]],
['reset_5ftimings',['reset_timings',['../classpyrax_1_1client_1_1BaseClient.html#ac8ac904919fa009e510cc25731bc20f8',1,'pyrax::client::BaseClient']]],
['resize',['resize',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseVolume.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseVolume.resize()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseInstance.resize()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseClient.html#a8f82cbc9bffef6b720c446024ddf35f9',1,'pyrax::clouddatabases::CloudDatabaseClient.resize()']]],
['resize_5fvolume',['resize_volume',['../classpyrax_1_1clouddatabases_1_1CloudDatabaseInstance.html#a184e71e943f21eaf224c511df2b58262',1,'pyrax::clouddatabases::CloudDatabaseInstance']]],
['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()']]],
['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()']]],
+ ['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']]],
['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()']]],
diff --git a/docs/html/search/functions_73.js b/docs/html/search/functions_73.js
index 15bd4523..82364e96 100644
--- a/docs/html/search/functions_73.js
+++ b/docs/html/search/functions_73.js
@@ -11,8 +11,8 @@ var searchData=
['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_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_1BaseAuth.html#a31357d099c87594b661d674bb12a56c0',1,'pyrax::base_identity::BaseAuth.set_credential_file()'],['../namespacepyrax.html#a7375be0702b4c4322b674eaf94795c19',1,'pyrax.set_credential_file()']]],
- ['set_5fcredentials',['set_credentials',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a29ca4bc84123f642dc6cf191e2d61543',1,'pyrax::base_identity::BaseAuth.set_credentials()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
+ ['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()'],['../namespacepyrax.html#a171229a7210ff6cb20c8162b859cb5df',1,'pyrax.set_credentials()']]],
['set_5fdefault_5fregion',['set_default_region',['../namespacepyrax.html#a5fb3ef963e598bfc25617161b2f2e4df',1,'pyrax']]],
['set_5fdelay',['set_delay',['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a13d1c3a88953a8923813b7d253010dd0',1,'pyrax::clouddns::CloudDNSClient']]],
['set_5fenvironment',['set_environment',['../namespacepyrax.html#a083408c25f486a8aa2fab4a17a587f26',1,'pyrax']]],
diff --git a/docs/html/search/functions_75.js b/docs/html/search/functions_75.js
index ca4efa9a..43d63577 100644
--- a/docs/html/search/functions_75.js
+++ b/docs/html/search/functions_75.js
@@ -1,8 +1,8 @@
var searchData=
[
- ['unauthenticate',['unauthenticate',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::base_identity::BaseAuth.unauthenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::client::BaseClient.unauthenticate()']]],
+ ['unauthenticate',['unauthenticate',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::base_identity::BaseIdentity.unauthenticate()'],['../classpyrax_1_1client_1_1BaseClient.html#a143a677947f3597dc3cc3055a0eae66e',1,'pyrax::client::BaseClient.unauthenticate()']]],
['unauthenticated',['unauthenticated',['../namespacepyrax_1_1utils.html#a662924ed2118b3ba66f1d1521a7c2b40',1,'pyrax::utils']]],
- ['update',['update',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroup.update()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroupManager.update()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScalePolicy.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleWebhook.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleClient.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUserManager.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUser.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSRecord.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSDomain.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::Node.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorCheck.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorNotification.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.update()'],['../classpyrax_1_1image_1_1Image.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::Image.update()'],['../classpyrax_1_1image_1_1ImageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageManager.update()'],['../classpyrax_1_1image_1_1ImageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageClient.update()'],['../classpyrax_1_1queueing_1_1QueueClaimManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::queueing::QueueClaimManager.update()']]],
+ ['update',['update',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroup.update()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::ScalingGroupManager.update()'],['../classpyrax_1_1autoscale_1_1AutoScalePolicy.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScalePolicy.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleWebhook.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleWebhook.update()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::autoscale::AutoScaleClient.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageManager.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageSnapshotManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageSnapshotManager.update()'],['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudblockstorage::CloudBlockStorageClient.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUserManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUserManager.update()'],['../classpyrax_1_1clouddatabases_1_1CloudDatabaseUser.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddatabases::CloudDatabaseUser.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSRecord.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSRecord.update()'],['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#abe52b977c101e59f342489ed18140819',1,'pyrax::clouddns::CloudDNSDomain.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update()'],['../classpyrax_1_1cloudloadbalancers_1_1Node.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::Node.update()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorCheck.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorCheck.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorNotification.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorNotification.update()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorAlarm.html#abe52b977c101e59f342489ed18140819',1,'pyrax::cloudmonitoring::CloudMonitorAlarm.update()'],['../classpyrax_1_1image_1_1Image.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::Image.update()'],['../classpyrax_1_1image_1_1ImageManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageManager.update()'],['../classpyrax_1_1image_1_1ImageClient.html#abe52b977c101e59f342489ed18140819',1,'pyrax::image::ImageClient.update()'],['../classpyrax_1_1queueing_1_1QueueClaimManager.html#abe52b977c101e59f342489ed18140819',1,'pyrax::queueing::QueueClaimManager.update()']]],
['update_5falarm',['update_alarm',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntity.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorEntity.update_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.update_alarm()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a5890867a408848b989089ddf26d20a18',1,'pyrax::cloudmonitoring::CloudMonitorClient.update_alarm()']]],
['update_5fcheck',['update_check',['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorEntityManager.html#a31db8ea7ae986d187cad68055d066a20',1,'pyrax::cloudmonitoring::CloudMonitorEntityManager.update_check()'],['../classpyrax_1_1cloudmonitoring_1_1CloudMonitorClient.html#a31db8ea7ae986d187cad68055d066a20',1,'pyrax::cloudmonitoring::CloudMonitorClient.update_check()']]],
['update_5fclaim',['update_claim',['../classpyrax_1_1queueing_1_1Queue.html#ac20bf3b335c30af755690d5d618b5d1e',1,'pyrax::queueing::Queue.update_claim()'],['../classpyrax_1_1queueing_1_1QueueClient.html#ac20bf3b335c30af755690d5d618b5d1e',1,'pyrax::queueing::QueueClient.update_claim()']]],
@@ -19,14 +19,15 @@ var searchData=
['update_5fpolicy',['update_policy',['../classpyrax_1_1autoscale_1_1ScalingGroup.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::ScalingGroup.update_policy()'],['../classpyrax_1_1autoscale_1_1ScalingGroupManager.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::ScalingGroupManager.update_policy()'],['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a671573d9f0e941efddc5450bc51d4d48',1,'pyrax::autoscale::AutoScaleClient.update_policy()']]],
['update_5fptr_5frecord',['update_ptr_record',['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#adb65ca014db6a16bb4c43d31087ae844',1,'pyrax::clouddns::CloudDNSManager.update_ptr_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#adb65ca014db6a16bb4c43d31087ae844',1,'pyrax::clouddns::CloudDNSClient.update_ptr_record()']]],
['update_5frecord',['update_record',['../classpyrax_1_1clouddns_1_1CloudDNSDomain.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSDomain.update_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSManager.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSManager.update_record()'],['../classpyrax_1_1clouddns_1_1CloudDNSClient.html#a68301b71ce78f89e6a5d44f1cb9c362a',1,'pyrax::clouddns::CloudDNSClient.update_record()']]],
+ ['update_5fsnapshot',['update_snapshot',['../classpyrax_1_1cloudblockstorage_1_1CloudBlockStorageClient.html#aaadd800ff1d2b105b80d9744b73475c4',1,'pyrax::cloudblockstorage::CloudBlockStorageClient']]],
['update_5fssl_5ftermination',['update_ssl_termination',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancer.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancer.update_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerManager.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancerManager.update_ssl_termination()'],['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#aad4c90f91195d71b1d99ee598220cb14',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.update_ssl_termination()']]],
- ['update_5ftenant',['update_tenant',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a25f2b401ee3068816e774d648abd83de',1,'pyrax::base_identity::BaseAuth']]],
- ['update_5fuser',['update_user',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1a7d86495f2e95ce37b02894a6fe85df',1,'pyrax::base_identity::BaseAuth.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_5ftenant',['update_tenant',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a25f2b401ee3068816e774d648abd83de',1,'pyrax::base_identity::BaseIdentity']]],
+ ['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']]],
- ['url_5ffor',['url_for',['../classpyrax_1_1fakes_1_1FakeServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::fakes::FakeServiceCatalog.url_for()'],['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::service_catalog::ServiceCatalog.url_for()']]]
+ ['url_5ffor',['url_for',['../classpyrax_1_1service__catalog_1_1ServiceCatalog.html#a50e97fbd8e0fb99b0ebf1b6d31958969',1,'pyrax::service_catalog::ServiceCatalog']]]
];
diff --git a/docs/html/search/variables_61.js b/docs/html/search/variables_61.js
index 180d11de..07eb1622 100644
--- a/docs/html/search/variables_61.js
+++ b/docs/html/search/variables_61.js
@@ -5,13 +5,15 @@ var searchData=
['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()']]],
['age',['age',['../classpyrax_1_1queueing_1_1QueueMessage.html#a043a7693e1d2d30988a0f821e0ab5f94',1,'pyrax::queueing::QueueMessage']]],
- ['api',['api',['../classpyrax_1_1fakes_1_1FakeManager.html#a20f1ed9e773962332ba30d1affbcd784',1,'pyrax::fakes::FakeManager::api()'],['../classpyrax_1_1manager_1_1BaseManager.html#a6da13b696f737097e0146e47cc0d0985',1,'pyrax::manager::BaseManager::api()']]],
+ ['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']]],
['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_1BaseAuth.html#a48f0dc4cf47cd14cdfda7e8495b0a76b',1,'pyrax::base_identity::BaseAuth.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()']]],
+ ['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']]],
['author_5femail',['author_email',['../namespacesetup.html#a9b3c5cceb9178d1968dd26e6f147265d',1,'setup']]],
['autoscale',['autoscale',['../namespacepyrax.html#a71d7ac858bc96ae6302115ab8fe7095a',1,'pyrax']]]
diff --git a/docs/html/search/variables_63.js b/docs/html/search/variables_63.js
index ca65eddc..3daa8942 100644
--- a/docs/html/search/variables_63.js
+++ b/docs/html/search/variables_63.js
@@ -13,6 +13,7 @@ var searchData=
['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_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']]],
['cloud_5fdatabases',['cloud_databases',['../namespacepyrax.html#af1a86dab674b703fc06491e66aacadb6',1,'pyrax']]],
['cloud_5fdns',['cloud_dns',['../namespacepyrax.html#acb0f91693d36d52270ed91fd2e919fcc',1,'pyrax']]],
diff --git a/docs/html/search/variables_64.js b/docs/html/search/variables_64.js
index cac2c095..3006ea73 100644
--- a/docs/html/search/variables_64.js
+++ b/docs/html/search/variables_64.js
@@ -7,7 +7,7 @@ var searchData=
['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_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']]],
['description',['description',['../namespacesetup.html#a23af17c78302b71c14ef38ea40b8d1d7',1,'setup']]],
diff --git a/docs/html/search/variables_65.js b/docs/html/search/variables_65.js
index 32d13cc4..a5470b30 100644
--- a/docs/html/search/variables_65.js
+++ b/docs/html/search/variables_65.js
@@ -2,13 +2,13 @@ var searchData=
[
['early_5fdate_5fstr',['EARLY_DATE_STR',['../namespacepyrax_1_1cf__wrapper_1_1client.html#a9115ffad088bca27e5e8c2cea2c413e2',1,'pyrax::cf_wrapper::client']]],
['endpoint_5ftype',['endpoint_type',['../classpyrax_1_1client_1_1BaseClient.html#a3bd93a44d4f767d114caabe620f7e772',1,'pyrax::client::BaseClient']]],
- ['endpoints',['endpoints',['../classpyrax_1_1exceptions_1_1AmbiguousEndpoints.html#a00b95759168f601d56d8cdc26a894d46',1,'pyrax::exceptions::AmbiguousEndpoints']]],
+ ['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_1BaseAuth.html#ac7a7efd7d064c324be145a0e88c25be8',1,'pyrax::base_identity::BaseAuth.expires()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a49192f7cc960a0aab538e014cf449225',1,'pyrax::base_identity::BaseAuth.expires()']]],
+ ['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()']]]
];
diff --git a/docs/html/search/variables_66.js b/docs/html/search/variables_66.js
index a3886ddc..1f5c44af 100644
--- a/docs/html/search/variables_66.js
+++ b/docs/html/search/variables_66.js
@@ -8,7 +8,6 @@ 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']]],
- ['fakeentrypoints',['fakeEntryPoints',['../namespacepyrax_1_1fakes.html#a04b050e4843b30d1d069f97fc0dc7c28',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']]],
['find_5fnetwork_5fby_5fname',['find_network_by_name',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#aa2a5394d949e4dbc374a082fe3c16d84',1,'pyrax::cloudnetworks::CloudNetworkClient']]],
diff --git a/docs/html/search/variables_68.js b/docs/html/search/variables_68.js
index b2f2f5ad..830fbb5f 100644
--- a/docs/html/search/variables_68.js
+++ b/docs/html/search/variables_68.js
@@ -4,7 +4,7 @@ var searchData=
['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_1BaseAuth.html#a80b9e3606456b3ebde43de9500b1fcbb',1,'pyrax::base_identity::BaseAuth.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_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_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 f9600ecf..aab666ff 100644
--- a/docs/html/search/variables_69.js
+++ b/docs/html/search/variables_69.js
@@ -1,7 +1,7 @@
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',['../namespacepyrax.html#ab7fc5a23efc53b58e213cd4cdf931c9f',1,'pyrax']]],
+ ['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']]],
['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']]],
diff --git a/docs/html/search/variables_6b.js b/docs/html/search/variables_6b.js
index 9594702b..eec85777 100644
--- a/docs/html/search/variables_6b.js
+++ b/docs/html/search/variables_6b.js
@@ -1,5 +1,5 @@
var searchData=
[
- ['keyring',['keyring',['../namespacepyrax.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax']]],
+ ['keyring',['keyring',['../namespacepyrax.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax.keyring()'],['../namespacepyrax_1_1base__identity.html#ad8e19fa572a32fe5e0d5497072f4b242',1,'pyrax::base_identity.keyring()']]],
['keywords',['keywords',['../namespacesetup.html#a4ff3826b383daec67638b9f024e7713d',1,'setup']]]
];
diff --git a/docs/html/search/variables_6e.js b/docs/html/search/variables_6e.js
index de64e925..202cd00b 100644
--- a/docs/html/search/variables_6e.js
+++ b/docs/html/search/variables_6e.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['name',['name',['../classpyrax_1_1autoscale_1_1AutoScaleClient.html#a8ccf841cb59e451791bcb2e1ac4f1edc',1,'pyrax::autoscale::AutoScaleClient::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_1FakeEntryPoint.html#ab74e6bf80237ddc4109968cedc58c151',1,'pyrax::fakes::FakeEntryPoint::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_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_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_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']]],
diff --git a/docs/html/search/variables_70.js b/docs/html/search/variables_70.js
index 92d54a63..ce660876 100644
--- a/docs/html/search/variables_70.js
+++ b/docs/html/search/variables_70.js
@@ -3,16 +3,19 @@ var searchData=
['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()']]],
['parent',['parent',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#a457d913bff1ebc8671c1eca1c9d5fc03',1,'pyrax::cloudloadbalancers::Node.parent()'],['../classpyrax_1_1cloudloadbalancers_1_1VirtualIP.html#a457d913bff1ebc8671c1eca1c9d5fc03',1,'pyrax::cloudloadbalancers::VirtualIP.parent()']]],
- ['password',['password',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ac0d6a26a6e1c25921ff65ba7790ee92d',1,'pyrax::base_identity::BaseAuth.password()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::base_identity::BaseAuth.password()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::fakes::FakeIdentity.password()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::identity::rax_identity::RaxIdentity.password()']]],
+ ['password',['password',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::base_identity::BaseIdentity.password()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::fakes::FakeIdentity.password()'],['../classpyrax_1_1identity_1_1rax__identity_1_1RaxIdentity.html#a9dbb300e28bc21c8dab41b01883918eb',1,'pyrax::identity::rax_identity::RaxIdentity.password()']]],
['password_5fset',['password_set',['../classpyrax_1_1fakes_1_1FakeKeyring.html#aa78ba13375646962adcae163c77385f1',1,'pyrax::fakes::FakeKeyring']]],
['path',['path',['../namespacepyrax_1_1identity.html#ae6fc00af7c5b5a7c5f40ce6dc6b47d85',1,'pyrax::identity']]],
['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']]],
['port',['port',['../classpyrax_1_1cloudloadbalancers_1_1Node.html#af8fb0f45ee0195c7422a49e6a8d72369',1,'pyrax::cloudloadbalancers::Node.port()'],['../classpyrax_1_1fakes_1_1FakeLoadBalancer.html#af8fb0f45ee0195c7422a49e6a8d72369',1,'pyrax::fakes::FakeLoadBalancer.port()']]],
+ ['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']]],
['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']]],
['pyfiles',['pyfiles',['../namespacepyrax_1_1identity.html#a9a780698de2669d7e87e1af026aebf2a',1,'pyrax::identity']]],
['pypath',['pypath',['../namespacepyrax_1_1identity.html#a41a87c16270907c740784cfa25d0c46a',1,'pyrax::identity']]]
];
diff --git a/docs/html/search/variables_72.js b/docs/html/search/variables_72.js
index 355748b7..ec6e378c 100644
--- a/docs/html/search/variables_72.js
+++ b/docs/html/search/variables_72.js
@@ -1,9 +1,9 @@
var searchData=
[
['reason',['reason',['../classpyrax_1_1fakes_1_1FakeResponse.html#a5841dcdf2d3ce6b320e3b4c6ee7f946a',1,'pyrax::fakes::FakeResponse']]],
- ['region',['region',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::BaseAuth']]],
+ ['region',['region',['../classpyrax_1_1base__identity_1_1Endpoint.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::Endpoint.region()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a1b9edddb3735d131c67e9e824f07c402',1,'pyrax::base_identity::BaseIdentity.region()']]],
['region_5fname',['region_name',['../classpyrax_1_1client_1_1BaseClient.html#a326b5b91b887c67a677e2eb509b569b6',1,'pyrax::client::BaseClient']]],
- ['regions',['regions',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a4c4786354df7358bf12c3c65069dd8b7',1,'pyrax::base_identity::BaseAuth.regions()'],['../namespacepyrax.html#a2b45bebec67926b49ea55f14eb0b8f8e',1,'pyrax.regions()']]],
+ ['regions',['regions',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a4c4786354df7358bf12c3c65069dd8b7',1,'pyrax::base_identity::BaseIdentity.regions()'],['../namespacepyrax.html#a2b45bebec67926b49ea55f14eb0b8f8e',1,'pyrax.regions()']]],
['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()']]],
['req_5fmethods',['req_methods',['../namespacepyrax_1_1http.html#a3dcfd54132333c9f02c8bd73426e98bb',1,'pyrax::http']]],
['request_5fid',['request_id',['../classpyrax_1_1exceptions_1_1ClientException.html#a24b613add05b03f7af1be9c4dab66d59',1,'pyrax::exceptions::ClientException']]],
diff --git a/docs/html/search/variables_73.js b/docs/html/search/variables_73.js
index 01748fa2..1c3b4a50 100644
--- a/docs/html/search/variables_73.js
+++ b/docs/html/search/variables_73.js
@@ -1,12 +1,17 @@
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']]],
['servers',['servers',['../classpyrax_1_1fakes_1_1FakeCSClient.html#af71474b240d7b489a9faab57df2218d6',1,'pyrax::fakes::FakeCSClient']]],
+ ['service',['service',['../classpyrax_1_1base__identity_1_1Endpoint.html#a552922e811100ffe52478cfa0320e980',1,'pyrax::base_identity::Endpoint']]],
+ ['service_5fcatalog',['service_catalog',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a83c5f5e2d286366b53226d42868654f2',1,'pyrax::base_identity::BaseIdentity']]],
+ ['service_5fmapping',['service_mapping',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#aaf52964abd8d35e156ba075e63d02b5a',1,'pyrax::base_identity::BaseIdentity']]],
['service_5fname',['service_name',['../classpyrax_1_1client_1_1BaseClient.html#ad71253c9267916c12cb3b7521e588151',1,'pyrax::client::BaseClient']]],
['service_5fnet_5fid',['SERVICE_NET_ID',['../classpyrax_1_1cloudnetworks_1_1CloudNetworkClient.html#a9ce6e9ad2518e648b379835f34a579ca',1,'pyrax::cloudnetworks::CloudNetworkClient.SERVICE_NET_ID()'],['../namespacepyrax_1_1cloudnetworks.html#a5c62116f0587043d67f22717c26a88f5',1,'pyrax::cloudnetworks.SERVICE_NET_ID()']]],
- ['services',['services',['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::base_identity::BaseAuth.services()'],['../namespacepyrax.html#af615dc60ad41afcddd9dfa11de351b5c',1,'pyrax.services()']]],
+ ['service_5ftype',['service_type',['../classpyrax_1_1base__identity_1_1Service.html#a4613550f73f11538014f2c577af27bc3',1,'pyrax::base_identity::Service.service_type()'],['../classpyrax_1_1fakes_1_1FakeIdentityService.html#a4613550f73f11538014f2c577af27bc3',1,'pyrax::fakes::FakeIdentityService.service_type()']]],
+ ['services',['services',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0bf3c8aa9017e52dd041b7e2c3327621',1,'pyrax::base_identity::BaseIdentity.services()'],['../namespacepyrax.html#af615dc60ad41afcddd9dfa11de351b5c',1,'pyrax.services()']]],
['settings',['settings',['../namespacepyrax.html#a9f379c663a918bd5beb1ed160f2b0c4d',1,'pyrax']]],
['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()']]],
['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()']]],
diff --git a/docs/html/search/variables_74.js b/docs/html/search/variables_74.js
index 5b75abb5..c8ecbb89 100644
--- a/docs/html/search/variables_74.js
+++ b/docs/html/search/variables_74.js
@@ -1,12 +1,12 @@
var searchData=
[
- ['tenant_5fid',['tenant_id',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ab2a0abf5d1b1c41d8e6a948bbd484341',1,'pyrax::base_identity::BaseAuth.tenant_id()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::BaseAuth.tenant_id()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::fakes::FakeIdentity.tenant_id()']]],
- ['tenant_5fname',['tenant_name',['../classpyrax_1_1base__identity_1_1BaseAuth.html#acff4040d09342f645146af9d59268bb7',1,'pyrax::base_identity::BaseAuth.tenant_name()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::base_identity::BaseAuth.tenant_name()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::fakes::FakeIdentity.tenant_name()']]],
+ ['tenant_5fid',['tenant_id',['../classpyrax_1_1base__identity_1_1Endpoint.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::Endpoint.tenant_id()'],['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::base_identity::BaseIdentity.tenant_id()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a9f8b98f9d8644964bbb15a9fb217ccb7',1,'pyrax::fakes::FakeIdentity.tenant_id()']]],
+ ['tenant_5fname',['tenant_name',['../classpyrax_1_1base__identity_1_1BaseIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::base_identity::BaseIdentity.tenant_name()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a0eda5ccf1b845b56032e5dfb7e536642',1,'pyrax::fakes::FakeIdentity.tenant_name()']]],
['testing_5frequires',['testing_requires',['../namespacesetup.html#a969980742bd642ab510b23eaf8534d0d',1,'setup']]],
['timeout',['timeout',['../classpyrax_1_1client_1_1BaseClient.html#aee145bfca8e9b2eaf3cd3c47157be9a3',1,'pyrax::client::BaseClient']]],
['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_1BaseAuth.html#a623ef6987ef3bd185c07b28b13e46d34',1,'pyrax::base_identity::BaseAuth.token()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::base_identity::BaseAuth.token()'],['../classpyrax_1_1fakes_1_1FakeIdentity.html#a87da3d8264af1c9427605148f20dd9c4',1,'pyrax::fakes::FakeIdentity::token()']]],
+ ['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()']]],
diff --git a/docs/html/search/variables_75.js b/docs/html/search/variables_75.js
index e92d0ff5..fe4d16ef 100644
--- a/docs/html/search/variables_75.js
+++ b/docs/html/search/variables_75.js
@@ -4,8 +4,8 @@ var searchData=
['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()']]],
['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_1BaseAuth.html#a5cc32e366c87c4cb49e4309b75f57d64',1,'pyrax::base_identity::BaseAuth']]],
- ['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_1BaseAuth.html#a51351345c837229ad773526cbc137fdf',1,'pyrax::base_identity::BaseAuth.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()']]],
- ['username',['username',['../classpyrax_1_1base__identity_1_1BaseAuth.html#aad02f271a6536fa078c6d1369ffdadc4',1,'pyrax::base_identity::BaseAuth::username()'],['../classpyrax_1_1base__identity_1_1BaseAuth.html#a0adcbe0e0e6f64a29b1d205ede9632c1',1,'pyrax::base_identity::BaseAuth::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()']]],
+ ['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()']]],
+ ['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 b5b0bfd0..eef8c151 100644
--- a/docs/html/search/variables_76.js
+++ b/docs/html/search/variables_76.js
@@ -1,7 +1,7 @@
var searchData=
[
['verbose',['verbose',['../classpyrax_1_1utils_1_1__WaitThread.html#aa9e289eddb591991c9bc7321dc5b186b',1,'pyrax::utils::_WaitThread']]],
- ['verify_5fssl',['verify_ssl',['../classpyrax_1_1base__identity_1_1BaseAuth.html#ab272fe6bf1c96faf1b3a59714b2692ed',1,'pyrax::base_identity::BaseAuth.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()']]],
+ ['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']]],
['virtualip',['VirtualIP',['../classpyrax_1_1cloudloadbalancers_1_1CloudLoadBalancerClient.html#a63d48857901b6d2ed9876d5c7b159e69',1,'pyrax::cloudloadbalancers::CloudLoadBalancerClient.VirtualIP()'],['../classpyrax_1_1fakes_1_1FakeService.html#a63d48857901b6d2ed9876d5c7b159e69',1,'pyrax::fakes::FakeService.VirtualIP()']]],
diff --git a/docs/html/utils_8py.html b/docs/html/utils_8py.html
index 129f65dc..b0f2d5db 100644
--- a/docs/html/utils_8py.html
+++ b/docs/html/utils_8py.html
@@ -91,6 +91,8 @@
|
@@ -170,7 +172,7 @@
diff --git a/docs/html/version_8py.html b/docs/html/version_8py.html
index e47d7059..2f4834c9 100644
--- a/docs/html/version_8py.html
+++ b/docs/html/version_8py.html
@@ -88,7 +88,7 @@
namespace | pyrax::version |
Variables |
-string | version = "1.7.3" |
+string | version = "1.8.0" |
@@ -108,7 +108,7 @@
diff --git a/docs/queues.md b/docs/queues.md
index 6c490181..05cbe0bf 100644
--- a/docs/queues.md
+++ b/docs/queues.md
@@ -44,12 +44,16 @@ Queues require a unique name. If you try to create a queue with a name that alre
queue = pq.create("my_unique_queue")
-There is currently no way to list existing queues, so if you need to determine whether a queue by a specific name exists, call:
+If you wish to check a given queue already exists, you may do so as follows:
exists = pq.queue_exists("name_to_check")
This call returns `True` or `False`, depending on the existence of a queue with the given name.
+## Listing queues
+The code below shows how you can list all the queues in a given region:
+
+ qs = pyrax.queues.list()
## Posting a Message to a Queue
Messages can be any type of data, as long as they do not exceed 256 KB in length. The message body can be simple values, or a chunk of XML, or a list of JSON values, or anything else. pyrax handles the JSON-encoding required to post the message.
diff --git a/pyrax/__init__.py b/pyrax/__init__.py
index 57e37bee..38d05b92 100755
--- a/pyrax/__init__.py
+++ b/pyrax/__init__.py
@@ -35,14 +35,15 @@
It also adds in CDN functionality that is Rackspace-specific.
"""
+
+from __future__ import absolute_import
from functools import wraps
import inspect
import logging
import os
+import six.moves.configparser as ConfigParser
import warnings
-from six.moves import configparser
-
# keyring is an optional import
try:
import keyring
@@ -59,21 +60,21 @@
from . import http
from . import version
- import cf_wrapper.client as _cf
+ 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.v1_1 import client as _cs_client
from novaclient.v1_1.servers import Server as CloudServer
- from autoscale import AutoScaleClient
- from clouddatabases import CloudDatabaseClient
- from cloudloadbalancers import CloudLoadBalancerClient
- from cloudblockstorage import CloudBlockStorageClient
- from clouddns import CloudDNSClient
- from cloudnetworks import CloudNetworkClient
- from cloudmonitoring import CloudMonitorClient
- from image import ImageClient
- from queueing import QueueClient
+ from .autoscale import AutoScaleClient
+ from .clouddatabases import CloudDatabaseClient
+ from .cloudloadbalancers import CloudLoadBalancerClient
+ from .cloudblockstorage import CloudBlockStorageClient
+ from .clouddns import CloudDNSClient
+ from .cloudnetworks import CloudNetworkClient
+ from .cloudmonitoring import CloudMonitorClient
+ from .image import ImageClient
+ from .queueing import QueueClient
except ImportError:
# See if this is the result of the importing of version.py in setup.py
callstack = inspect.stack()
@@ -118,6 +119,8 @@
services = tuple()
_client_classes = {
+ "object_store": _cf.CFClient,
+ "compute": _cs_client.Client,
"database": CloudDatabaseClient,
"load_balancer": CloudLoadBalancerClient,
"volume": CloudBlockStorageClient,
@@ -168,7 +171,7 @@ class Settings(object):
"verify_ssl": "CLOUD_VERIFY_SSL",
"use_servicenet": "USE_SERVICENET",
}
- _settings = {"default": dict.fromkeys(env_dct.keys())}
+ _settings = {"default": dict.fromkeys(list(env_dct.keys()))}
_default_set = False
@@ -210,7 +213,7 @@ def set(self, key, val, env=None):
else:
if env not in self._settings:
raise exc.EnvironmentNotFound("There is no environment named "
- "'%s'." % env)
+ "'%s'." % env)
dct = self._settings[env]
if key not in dct:
raise exc.InvalidSetting("The setting '%s' is not defined." % key)
@@ -257,7 +260,7 @@ def _setEnvironment(self, val):
@property
def environments(self):
- return self._settings.keys()
+ return list(self._settings.keys())
def read_config(self, config_file):
@@ -265,17 +268,17 @@ def read_config(self, config_file):
Parses the specified configuration file and stores the values. Raises
an InvalidConfigurationFile exception if the file is not well-formed.
"""
- cfg = configparser.SafeConfigParser()
+ cfg = ConfigParser.SafeConfigParser()
try:
cfg.read(config_file)
- except configparser.MissingSectionHeaderError as e:
+ except ConfigParser.MissingSectionHeaderError as e:
# The file exists, but doesn't have the correct format.
raise exc.InvalidConfigurationFile(e)
def safe_get(section, option, default=None):
try:
return cfg.get(section, option)
- except (configparser.NoSectionError, configparser.NoOptionError):
+ except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
return default
# A common mistake is including credentials in the config file. If any
@@ -297,8 +300,9 @@ def safe_get(section, option, default=None):
dct = self._settings[section_name] = {}
dct["region"] = safe_get(section, "region", default_region)
ityp = safe_get(section, "identity_type")
- dct["identity_type"] = _id_type(ityp)
- dct["identity_class"] = _import_identity(ityp)
+ if ityp:
+ dct["identity_type"] = _id_type(ityp)
+ dct["identity_class"] = _import_identity(ityp)
# Handle both the old and new names for this setting.
debug = safe_get(section, "debug")
if debug is None:
@@ -377,18 +381,46 @@ def set_default_region(region):
default_region = region
-def _create_identity():
+def create_context(id_type=None, env=None, username=None, password=None,
+ tenant_id=None, tenant_name=None, api_key=None, verify_ssl=None):
+ """
+ Returns an instance of the specified identity class, or if none is
+ specified, an instance of the current setting for 'identity_class'.
+
+ You may optionally set the environment by passing the name of that
+ environment in the 'env' parameter.
+ """
+ if env:
+ set_environment(env)
+ return _create_identity(id_type=id_type, username=username,
+ password=password, tenant_id=tenant_id, tenant_name=tenant_name,
+ api_key=api_key, verify_ssl=verify_ssl, return_context=True)
+
+
+def _create_identity(id_type=None, username=None, password=None, tenant_id=None,
+ tenant_name=None, api_key=None, verify_ssl=None,
+ return_context=False):
"""
Creates an instance of the current identity_class and assigns it to the
- module-level name 'identity'.
+ module-level name 'identity' by default. If 'return_context' is True, the
+ module-level 'identity' is untouched, and instead the instance is returned.
"""
- global identity
- cls = settings.get("identity_class")
+ if id_type:
+ cls = _import_identity(id_type)
+ else:
+ cls = settings.get("identity_class")
if not cls:
raise exc.IdentityClassNotDefined("No identity class has "
"been defined for the current environment.")
- verify_ssl = get_setting("verify_ssl")
- identity = cls(verify_ssl=verify_ssl)
+ if verify_ssl is None:
+ verify_ssl = get_setting("verify_ssl")
+ context = cls(username=username, password=password, tenant_id=tenant_id,
+ tenant_name=tenant_name, api_key=api_key, verify_ssl=verify_ssl)
+ if return_context:
+ return context
+ else:
+ global identity
+ identity = context
def _assure_identity(fnc):
@@ -412,13 +444,16 @@ def _wrapped(*args, **kwargs):
return _wrapped
-@_assure_identity
-def _safe_region(region=None):
+def _safe_region(region=None, context=None):
"""Value to use when no region is specified."""
ret = region or settings.get("region")
+ context = context or identity
if not ret:
# Nothing specified; get the default from the identity object.
- ret = identity.get_default_region()
+ if not context:
+ _create_identity()
+ context = identity
+ ret = context.get_default_region()
if not ret:
# Use the first available region
try:
@@ -452,9 +487,8 @@ def set_credentials(username, api_key=None, password=None, region=None,
region = _safe_region(region)
tenant_id = tenant_id or settings.get("tenant_id")
identity.set_credentials(username=username, password=pw_key,
- tenant_id=tenant_id, region=region)
- if authenticate:
- _auth_and_connect(region=region)
+ tenant_id=tenant_id, region=region, authenticate=authenticate)
+ connect_to_services(region=region)
@_assure_identity
@@ -479,9 +513,9 @@ def set_credential_file(cred_file, region=None, authenticate=True):
for that region, and set the default region for connections.
"""
region = _safe_region(region)
- identity.set_credential_file(cred_file, region=region)
- if authenticate:
- _auth_and_connect(region=region)
+ identity.set_credential_file(cred_file, region=region,
+ authenticate=authenticate)
+ connect_to_services(region=region)
def keyring_auth(username=None, region=None, authenticate=True):
@@ -514,23 +548,6 @@ def keyring_auth(username=None, region=None, authenticate=True):
authenticate=authenticate)
-def _auth_and_connect(region=None, connect=True):
- """
- Handles the call to authenticate, and if successful, connects to the
- various services.
- """
- global default_region
- identity.authenticated = False
- default_region = region or default_region
- try:
- identity.authenticate()
- except exc.AuthenticationFailed:
- clear_credentials()
- raise
- if connect:
- connect_to_services(region=region)
-
-
@_assure_identity
def authenticate(connect=True):
"""
@@ -545,8 +562,11 @@ def authenticate(connect=True):
Normally after successful authentication, connections to the various
services will be made. However, passing False to the `connect` parameter
will skip the service connection step.
+
+ The 'connect' parameter is retained for backwards compatibility. It no
+ longer has any effect.
"""
- _auth_and_connect(connect=connect)
+ identity.authenticate()
def plug_hole_in_swiftclient_auth(clt, url):
@@ -610,46 +630,50 @@ def connect_to_services(region=None):
queues = connect_to_queues(region=region)
-def _get_service_endpoint(svc, region=None, public=True):
+def _get_service_endpoint(context, svc, region=None, public=True):
"""
Parses the services dict to get the proper endpoint for the given service.
"""
region = _safe_region(region)
- url_type = {True: "public_url", False: "internal_url"}[public]
- ep = identity.services.get(svc, {}).get("endpoints", {}).get(
- region, {}).get(url_type)
+ # If a specific context is passed, use that. Otherwise, use the global
+ # identity reference.
+ context = context or identity
+ url_type = {True: "public", False: "private"}[public]
+ svc_obj = context.services.get(svc)
+ if not svc_obj:
+ return None
+ ep = svc_obj.endpoints.get(region, {}).get(url_type)
if not ep:
# Try the "ALL" region, and substitute the actual region
- ep = identity.services.get(svc, {}).get("endpoints", {}).get(
- "ALL", {}).get(url_type)
+ ep = svc_obj.endpoints.get("ALL", {}).get(url_type)
return ep
-@_require_auth
-def connect_to_cloudservers(region=None, **kwargs):
+def connect_to_cloudservers(region=None, context=None, **kwargs):
"""Creates a client for working with cloud servers."""
+ context = context or identity
_cs_auth_plugin.discover_auth_systems()
id_type = get_setting("identity_type")
if id_type != "keystone":
auth_plugin = _cs_auth_plugin.load_plugin(id_type)
else:
auth_plugin = None
- region = _safe_region(region)
- mgt_url = _get_service_endpoint("compute", region)
+ region = _safe_region(region, context=context)
+ mgt_url = _get_service_endpoint(context, "compute", region)
cloudservers = None
if not mgt_url:
# Service is not available
return
insecure = not get_setting("verify_ssl")
- cloudservers = _cs_client.Client(identity.username, identity.password,
- project_id=identity.tenant_id, auth_url=identity.auth_endpoint,
+ 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,
http_log_debug=_http_debug, **kwargs)
agt = cloudservers.client.USER_AGENT
cloudservers.client.USER_AGENT = _make_agent_name(agt)
cloudservers.client.management_url = mgt_url
- cloudservers.client.auth_token = identity.token
+ cloudservers.client.auth_token = context.token
cloudservers.exceptions = _cs_exceptions
# Add some convenience methods
cloudservers.list_images = cloudservers.images.list
@@ -677,8 +701,7 @@ def list_snapshots():
return cloudservers
-@_require_auth
-def connect_to_cloudfiles(region=None, public=None):
+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
@@ -688,23 +711,26 @@ def connect_to_cloudfiles(region=None, public=None):
is_public = not bool(get_setting("use_servicenet"))
else:
is_public = public
-
- region = _safe_region(region)
- cf_url = _get_service_endpoint("object_store", region, public=is_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,
+ public=is_public)
cloudfiles = None
if not cf_url:
# Service is not available
return
- cdn_url = _get_service_endpoint("object_cdn", region)
+ cdn_url = _get_service_endpoint(context, "object_cdn", region)
ep_type = {True: "publicURL", False: "internalURL"}[is_public]
- opts = {"tenant_id": identity.tenant_name, "auth_token": identity.token,
- "endpoint_type": ep_type, "tenant_name": identity.tenant_name,
+ 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(identity.auth_endpoint, identity.username,
- identity.password, tenant_name=identity.tenant_name,
- preauthurl=cf_url, preauthtoken=identity.token, auth_version="2",
+ 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)
return cloudfiles
@@ -713,13 +739,13 @@ def connect_to_cloudfiles(region=None, public=None):
@_require_auth
def _create_client(ep_name, region, public=True):
region = _safe_region(region)
- ep = _get_service_endpoint(ep_name.split(":")[0], region, public=public)
+ ep = _get_service_endpoint(None, ep_name.split(":")[0], region, public=public)
if not ep:
return
verify_ssl = get_setting("verify_ssl")
cls = _client_classes[ep_name]
- client = cls(region_name=region, management_url=ep, verify_ssl=verify_ssl,
- http_log_debug=_http_debug)
+ client = cls(identity, region_name=region, management_url=ep,
+ verify_ssl=verify_ssl, http_log_debug=_http_debug)
client.user_agent = _make_agent_name(client.user_agent)
return client
@@ -769,16 +795,24 @@ def connect_to_queues(region=None, public=True):
return _create_client(ep_name="queues", region=region, public=public)
+def client_class_for_service(service):
+ """
+ Returns the client class registered for the given service, or None if there
+ is no such service, or if no class has been registered.
+ """
+ return _client_classes.get(service)
+
+
def get_http_debug():
return _http_debug
-@_assure_identity
def set_http_debug(val):
global _http_debug
_http_debug = val
# Set debug on the various services
- identity.http_log_debug = val
+ if identity:
+ identity.http_log_debug = val
for svc in (cloudservers, cloudfiles, cloud_loadbalancers,
cloud_blockstorage, cloud_databases, cloud_dns, cloud_networks,
autoscale, images, queues):
diff --git a/pyrax/base_identity.py b/pyrax/base_identity.py
index 3fc99900..405ef302 100644
--- a/pyrax/base_identity.py
+++ b/pyrax/base_identity.py
@@ -1,18 +1,24 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from __future__ import print_function
+from __future__ import absolute_import
+
+import six.moves.configparser as ConfigParser
import datetime
import json
import re
+import requests
-from six.moves import configparser
+try:
+ import keyring
+except ImportError:
+ keyring = None
import pyrax
-import pyrax.exceptions as exc
-from pyrax.resource import BaseResource
-import pyrax.utils as utils
+from . import exceptions as exc
+from .resource import BaseResource
+from . import utils
_pat = r"""
@@ -33,6 +39,9 @@
UTC_API_DATE_PATTERN = re.compile(_utc_pat, re.VERBOSE)
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
+# Default region for all services. Can be individually overridden if needed
+default_region = None
+
class Tenant(BaseResource):
pass
@@ -42,36 +51,254 @@ class User(BaseResource):
pass
-class BaseAuth(object):
+class Role(BaseResource):
+ pass
+
+
+class Service(object):
+ """
+ Represents an available service from the service catalog.
+ """
+ def __init__(self, identity, catalog):
+ """
+ Parse the catalog entry for a particular service.
+ """
+ self.identity = identity
+ self.name = catalog.get("name")
+ # Replace any dashes with underscores.
+ fulltype = catalog["type"].replace("-", "_")
+ # Some provider-specific services are prefixed with that info.
+ try:
+ self.prefix, self.service_type = fulltype.split(":")
+ except ValueError:
+ self.prefix = ""
+ self.service_type = fulltype
+ if self.service_type == "compute":
+ if self.name.lower() == "cloudservers":
+ # First-generation Rackspace cloud servers
+ return
+ self.clients = {}
+ self.endpoints = utils.DotDict()
+ eps = catalog.get("endpoints", [])
+ for ep in eps:
+ rgn = ep.get("region", "ALL")
+ self.endpoints[rgn] = Endpoint(ep, self.service_type, rgn, identity)
+ return
+
+
+ def __repr__(self):
+ memloc = hex(id(self))
+ return "<'%s' Service object at %s>" % (self.service_type, memloc)
+
+
+ def _ep_for_region(self, region):
+ """
+ Given a region, returns the Endpoint for that region, or the Endpoint
+ for the ALL region if no match is found. If no match is found, None
+ is returned, and it is up to the calling method to handle it
+ appropriately.
+ """
+ rgn = region.upper()
+ try:
+ rgn_ep = [ep for ep in list(self.endpoints.values())
+ if ep.region.upper() == rgn][0]
+ except IndexError:
+ # See if there is an 'ALL' region.
+ try:
+ rgn_ep = [ep for ep in list(self.endpoints.values())
+ if ep.region.upper() == "ALL"][0]
+ except IndexError:
+ rgn_ep = None
+ return rgn_ep
+
+
+ def get_client(self, region):
+ """
+ Returns an instance of the appropriate client class for the given
+ region. If there is no endpoint for that region, a NoEndpointForRegion
+ exception is raised.
+ """
+ ep = self._ep_for_region(region)
+ if not ep:
+ raise exc.NoEndpointForRegion("There is no endpoint defined for the "
+ "region '%s' for the '%s' service." % (region,
+ self.service_type))
+ return ep.client
+
+
+ @property
+ def regions(self):
+ """
+ Returns a list of all regions which support this service.
+ """
+ return list(self.endpoints.keys())
+
+
+
+class Endpoint(object):
+ """
+ Holds the endpoint information, as well as an instance of the appropriate
+ client for that service and region.
+ """
+ public_url = None
+ private_url = None
+ tenant_id = None
+ region = None
+ _client = None
+ _client_private = None
+ attr_map = {"publicURL": "public_url",
+ "privateURL": "private_url",
+ "tenantId": "tenant_id",
+ }
+
+
+ def __init__(self, ep_dict, service, region, identity):
+ """
+ Set local attributes from the supplied dictionary.
+ """
+ self.service = service
+ self.region = region
+ self.identity = identity
+ for key, val in list(ep_dict.items()):
+ att_name = self.attr_map.get(key, key)
+ setattr(self, att_name, val)
+
+
+ def _get_client(self, public=True):
+ client_att = "_client" if public else "_client_private"
+ clt = getattr(self, client_att)
+ if isinstance(clt, exc.NoClientForService):
+ # Already failed
+ raise clt
+ if clt is not None:
+ return clt
+ # Create the client
+ clt_class = pyrax.client_class_for_service(self.service)
+ if clt_class is None:
+ noclass = exc.NoClientForService("No client for the '%s' service "
+ "has been registered." % self.service)
+ setattr(self, client_att, noclass)
+ raise noclass
+ url_att = "public_url" if public else "private_url"
+ url = getattr(self, url_att)
+ if not url:
+ nourl = exc.NoEndpointForService("No %s endpoint is available for "
+ "the '%s' service." % (url_att, self.service))
+ setattr(self, client_att, nourl)
+ raise nourl
+ clt = self._create_client(clt_class, url, public=public)
+ setattr(self, client_att, clt)
+ return clt
+
+
+ def get(self, url_type):
+ """
+ Accepts either 'public' or 'private' as a parameter, and returns the
+ corresponding value for 'public_url' or 'private_url', respectively.
+ """
+ lowtype = url_type.lower()
+ if lowtype == "public":
+ return self.public_url
+ elif lowtype == "private":
+ return self.private_url
+ else:
+ raise ValueError("Valid values are 'public' or 'private'; "
+ "received '%s'." % url_type)
+
+
+ def __getattr__(self, att):
+ clt = self.client
+ ret = getattr(clt, att, None)
+ if ret:
+ return ret
+ else:
+ raise AttributeError("Endpoint for service '%s' in region '%s' "
+ "has no attribute '%s'." % (self.service, self.region, att))
+
+
+ @property
+ def client(self):
+ return self._get_client(public=True)
+
+
+ @property
+ def client_private(self):
+ return self._get_client(public=False)
+
+
+ def _create_client(self, clt_class, url, public=True):
+ """
+ Creates a client instance for the service.
+ """
+ verify_ssl = pyrax.get_setting("verify_ssl")
+ if self.service == "object_store":
+ # Swiftclient requires different parameters.
+ client = pyrax.connect_to_cloudfiles(region=self.region,
+ public=public, context=self.identity)
+ elif self.service == "compute":
+ # Novaclient also requires special handling.
+ client = pyrax.connect_to_cloudservers(region=self.region,
+ context=self.identity)
+ else:
+ client = clt_class(self.identity, region_name=self.region,
+ management_url=url, verify_ssl=verify_ssl)
+ return client
+
+
+
+class BaseIdentity(object):
"""
This class handles all of the basic authentication requirements for working
with an OpenStack Cloud system.
"""
- username = ""
- password = ""
- token = ""
- expires = ""
- tenant_id = ""
- tenant_name = ""
- authenticated = False
- user_agent = "pyrax"
- http_log_debug = False
- _default_region = None
-
-
- def __init__(self, username=None, password=None, token=None,
- credential_file=None, region=None, timeout=None, verify_ssl=True):
+ _creds_style = "password"
+ def __init__(self, username=None, password=None, tenant_id=None,
+ tenant_name=None, auth_endpoint=None, api_key=None, token=None,
+ credential_file=None, region=None, timeout=None, verify_ssl=True):
+ """
+ Initializes the attributes for this identity object.
+ """
self.username = username
self.password = password
+ self.tenant_id = tenant_id
+ self.tenant_name = tenant_name
self.token = token
+ self.expires = None
self.region = region
self._creds_file = credential_file
self._timeout = timeout
- self.services = {}
- self.regions = set()
self.verify_ssl = verify_ssl
- self._auth_endpoint = None
+ self._auth_endpoint = auth_endpoint
+ self.api_key = api_key
+ self.services = utils.DotDict()
+ self.regions = utils.DotDict()
+ self._default_creds_style = "password"
+ self.authenticated = False
+ self.user_agent = "pyrax"
+ self.http_log_debug = False
+ self._default_region = None
+ self.service_mapping = {
+ "cloudservers": "compute",
+ "nova": "compute",
+ "cloudfiles": "object_store",
+ "swift": "object_store",
+ "cloud_loadbalancers": "load_balancer",
+ "cloud_databases": "database",
+ "trove": "database",
+ "cloud_blockstorage": "volume",
+ "cinder": "volume",
+ "cloud_dns": "dns",
+ "designate": "dns",
+ "cloud_networks": "network",
+ "neutron": "network",
+ "cloud_monitoring": "monitor",
+ "autoscale": "autoscale",
+ "images": "image",
+ "glance": "image",
+ "queues": "queues",
+ "marconi": "queues",
+ }
@property
@@ -82,7 +309,9 @@ def auth_token(self):
@property
def auth_endpoint(self):
- """Abstracts out the logic for connecting to different auth endpoints."""
+ """
+ Abstracts out the logic for connecting to different auth endpoints.
+ """
return self._get_auth_endpoint()
@@ -92,9 +321,10 @@ def auth_endpoint(self, val):
def _get_auth_endpoint(self):
- """Each subclass will have to implement its own method."""
- raise NotImplementedError("The _get_auth_endpoint() method must be "
- "defined in Auth subclasses.")
+ """
+ Broken out in case subclasses need to determine endpoints dynamically.
+ """
+ return self._auth_endpoint or pyrax.get_setting("auth_endpoint")
def get_default_region(self):
@@ -106,6 +336,55 @@ def get_default_region(self):
return self._default_region
+ def __getattr__(self, att):
+ """
+ Magic to allow for specification of client by region/service or by
+ service/region.
+
+ If a service is specified, this should return an object whose endpoints
+ contain keys for each available region for that service. If a region is
+ specified, an object with keys for each service available in that
+ region should be returned.
+ """
+ if not self.authenticated:
+ raise exc.NotAuthenticated("Authentication required before "
+ "accessing the context.")
+ # First see if it's a service
+ att = self.service_mapping.get(att) or att
+ svc = self.services.get(att)
+ if svc is not None:
+ return svc.endpoints
+ # Either invalid service, or a region
+ ret = utils.DotDict([(stype, svc.endpoints.get(att))
+ for stype, svc in list(self.services.items())
+ if svc.endpoints.get(att) is not None])
+ ret._att_mapper.update(self.service_mapping)
+ if ret:
+ return ret
+ # Invalid attribute
+ raise AttributeError("No such attribute '%s'." % att)
+
+
+ def get_client(self, service, region, public=True):
+ """
+ Returns the client object for the specified service and region.
+
+ By default the public endpoint is used. If you wish to work with a
+ services internal endpoints, specify `public=False`.
+ """
+ clt = ep = None
+ mapped_service = self.service_mapping.get(service) or service
+ svc = self.services.get(mapped_service)
+ if svc:
+ ep = svc.endpoints.get(region)
+ if ep:
+ clt = ep.client if public else ep.client_private
+ if not clt:
+ raise exc.NoSuchClient("There is no client available for the "
+ "service '%s' in the region '%s'." % (service, region))
+ return clt
+
+
def set_credentials(self, username, password=None, region=None,
tenant_id=None, authenticate=False):
"""Sets the username and password directly."""
@@ -119,7 +398,7 @@ def set_credentials(self, username, password=None, region=None,
def set_credential_file(self, credential_file, region=None,
- tenant_id=tenant_id, authenticate=False):
+ tenant_id=None, authenticate=False):
"""
Reads in the credentials from the supplied file. It should be
a standard config file in the format:
@@ -131,19 +410,19 @@ def set_credential_file(self, credential_file, region=None,
"""
self._creds_file = credential_file
- cfg = configparser.SafeConfigParser()
+ cfg = ConfigParser.SafeConfigParser()
try:
if not cfg.read(credential_file):
- # If the specified file does not exist, the parser will
- # return an empty list
+ # If the specified file does not exist, the parser returns an
+ # empty list.
raise exc.FileNotFound("The specified credential file '%s' "
"does not exist" % credential_file)
- except configparser.MissingSectionHeaderError as e:
+ except ConfigParser.MissingSectionHeaderError as e:
# The file exists, but doesn't have the correct format.
raise exc.InvalidCredentialFile(e)
try:
self._read_credential_file(cfg)
- except (configparser.NoSectionError, configparser.NoOptionError) as e:
+ except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e:
raise exc.InvalidCredentialFile(e)
if region:
self.region = region
@@ -153,29 +432,30 @@ def set_credential_file(self, credential_file, region=None,
def auth_with_token(self, token, tenant_id=None, tenant_name=None):
"""
- If a valid token is already known, this call will use it to generate
- the service catalog.
+ If a valid token is already known, this call uses it to generate the
+ service catalog.
"""
- resp = self._call_token_auth(token, tenant_id, tenant_name)
- resp_body = resp.json()
+ resp, resp_body = self._call_token_auth(token, tenant_id, tenant_name)
self._parse_response(resp_body)
self.authenticated = True
def _call_token_auth(self, token, tenant_id, tenant_name):
- if not any((tenant_id, tenant_name)):
- raise exc.MissingAuthSettings("You must supply either the tenant "
- "name or tenant ID")
+ key = val = None
if tenant_id:
key = "tenantId"
val = tenant_id
- else:
+ elif tenant_name:
key = "tenantName"
val = tenant_name
+
body = {"auth": {
- key: val,
"token": {"id": token},
}}
+
+ if(key and val):
+ body["auth"][key] = val
+
headers = {"Content-Type": "application/json",
"Accept": "application/json",
}
@@ -188,7 +468,7 @@ def _call_token_auth(self, token, tenant_id, tenant_name):
elif resp.status_code > 299:
msg = resp_body[resp_body.keys()[0]]["message"]
raise exc.AuthenticationFailed("%s - %s." % (resp.reason, msg))
- return resp
+ return resp, resp_body
def _read_credential_file(self, cfg):
@@ -200,7 +480,7 @@ def _read_credential_file(self, cfg):
self.tenant_id = cfg.get("keystone", "tenant_id")
- def _get_credentials(self):
+ def _format_credentials(self):
"""
Returns the current credentials in the format expected by
the authentication service.
@@ -243,6 +523,10 @@ def method_patch(self, uri, admin=False, data=None, headers=None,
def _call(self, mthd, uri, admin, data, headers, std_headers):
+ """
+ Handles all the common functionality required for API calls. Returns
+ the resulting response object.
+ """
if not uri.startswith("http"):
uri = "/".join((self.auth_endpoint.rstrip("/"), uri))
if admin:
@@ -263,13 +547,25 @@ def _call(self, mthd, uri, admin, data, headers, std_headers):
return pyrax.http.request(mthd, uri, **kwargs)
- def authenticate(self):
+ def authenticate(self, username=None, password=None, api_key=None,
+ tenant_id=None):
"""
Using the supplied credentials, connects to the specified
- authentication endpoint and attempts to log in. If successful,
- records the token information.
+ authentication endpoint and attempts to log in.
+
+ Credentials can either be passed directly to this method, or
+ 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.
"""
- creds = self._get_credentials()
+ self.username = username or self.username or pyrax.get_setting(
+ "username")
+ # Different identity systems may pass these under inconsistent names.
+ self.password = password or self.password or api_key or self.api_key
+ self.api_key = api_key or self.api_key or self.password
+ self.tenant_id = tenant_id or self.tenant_id or pyrax.get_setting(
+ "tenant_id")
+ creds = self._format_credentials()
headers = {"Content-Type": "application/json",
"Accept": "application/json",
}
@@ -282,12 +578,14 @@ def authenticate(self):
"credentials received")
elif 500 <= resp.status_code < 600:
# Internal Server Error
- error_msg = resp.content or "Service Currently Unavailable"
+ try:
+ error_msg = resp_body[list(resp_body.keys())[0]]["message"]
+ except KeyError:
+ error_msg = "Service Currently Unavailable"
raise exc.InternalServerError(error_msg)
- elif 299 < resp.status_code < 500:
- msg_dict = resp.json()
+ elif resp.status_code > 299:
try:
- msg = msg_dict[msg_dict.keys()[0]]["message"]
+ msg = resp_body[list(resp_body.keys())[0]]["message"]
except KeyError:
msg = None
if msg:
@@ -307,31 +605,8 @@ def _parse_response(self, resp):
self.tenant_id = token["tenant"]["id"]
self.tenant_name = token["tenant"]["name"]
self.expires = self._parse_api_time(token["expires"])
- svc_cat = access.get("serviceCatalog")
- self.services = {}
- for svc in svc_cat:
- # Replace any dashes with underscores.
- # Also, some service types are extensions that have vendor-specific
- # identifiers; strip them.
- typ = svc["type"].replace("-", "_").split(":")[-1]
- if typ == "compute":
- if svc["name"].lower() == "cloudservers":
- # First-generation Rackspace cloud servers
- continue
- self.services[typ] = dict(name=svc["name"], endpoints={})
- svc_ep = self.services[typ]["endpoints"]
- for ep in svc["endpoints"]:
- rgn = ep.get("region", "ALL")
- self.regions.add(rgn)
- svc_ep[rgn] = {}
- svc_ep[rgn]["public_url"] = ep["publicURL"]
- try:
- svc_ep[rgn]["internal_url"] = ep["internalURL"]
- except KeyError:
- pass
- self.regions.discard("ALL")
- pyrax.regions = tuple(self.regions)
- pyrax.services = tuple(self.services.keys())
+ self.service_catalog = access.get("serviceCatalog")
+ self._parse_service_catalog()
user = access["user"]
self.user = {}
self.user["id"] = user["id"]
@@ -339,13 +614,69 @@ def _parse_response(self, resp):
self.user["roles"] = user["roles"]
+ def _parse_service_catalog(self):
+ self.services = utils.DotDict()
+ self.regions = set()
+ for svc in self.service_catalog:
+ service = Service(self, svc)
+ if not hasattr(service, "endpoints"):
+ # Not an OpenStack service
+ continue
+ setattr(self.services, service.service_type, service)
+ self.regions.update(list(service.endpoints.keys()))
+ # Update the 'ALL' services to include all available regions.
+ self.regions.discard("ALL")
+ for nm, svc in list(self.services.items()):
+ eps = svc.endpoints
+ ep = eps.pop("ALL", None)
+ if ep:
+ for rgn in self.regions:
+ eps[rgn] = ep
+
+
+ def keyring_auth(self, username=None):
+ """
+ Uses the keyring module to retrieve the user's password or api_key.
+ """
+ if not keyring:
+ # Module not installed
+ raise exc.KeyringModuleNotInstalled("The 'keyring' Python module "
+ "is not installed on this system.")
+ if username is None:
+ username = pyrax.get_setting("keyring_username")
+ if not username:
+ raise exc.KeyringUsernameMissing("No username specified for "
+ "keyring authentication.")
+ password = keyring.get_password("pyrax", username)
+ if password is None:
+ raise exc.KeyringPasswordNotFound("No password was found for the "
+ "username '%s'." % username)
+ style = self._creds_style or self._default_creds_style
+ # Keyring username may be different than the credentials. Use the
+ # existing username, if present; otherwise, use the supplied username.
+ username = self.username or username
+ if style == "apikey":
+ return self.authenticate(username=username, api_key=password)
+ else:
+ return self.authenticate(username=username, password=password)
+
+
def unauthenticate(self):
"""
- Clears all authentication information.
+ Clears out any credentials, tokens, and service catalog info.
"""
- self.token = self.expires = self.tenant_id = self.tenant_name = ""
+ self.username = ""
+ self.password = ""
+ self.tenant_id = ""
+ self.tenant_name = ""
+ self.token = ""
+ self.expires = None
+ self.region = ""
+ self._creds_file = None
+ self.api_key = ""
+ self.services = utils.DotDict()
+ self.regions = utils.DotDict()
self.authenticated = False
- self.services = {}
def _standard_headers(self):
@@ -368,8 +699,9 @@ def get_extensions(self):
def get_token(self, force=False):
- """Returns the auth token, if it is valid. If not, calls the auth endpoint
- to get a new token. Passing 'True' to 'force' will force a call for a new
+ """
+ Returns the auth token, if it is valid. If not, calls the auth endpoint
+ to get a new token. Passing 'True' to 'force' forces a call for a new
token, even if there already is a valid token.
"""
self.authenticated = self._has_valid_token()
@@ -413,6 +745,18 @@ def check_token(self, token=None):
return 200 <= resp.status_code < 300
+ def revoke_token(self, token):
+ """
+ ADMIN ONLY. Returns True or False, depending on whether deletion of the
+ specified token was successful.
+ """
+ resp, resp_body = self.method_delete("tokens/%s" % token, admin=True)
+ if resp.status_code in (401, 403):
+ raise exc.AuthorizationFailure("You must be an admin to make this "
+ "call.")
+ return 200 <= resp.status_code < 300
+
+
def get_token_endpoints(self):
"""
ADMIN ONLY. Returns a list of all endpoints for the current auth token.
@@ -435,15 +779,15 @@ def list_users(self):
if resp.status_code in (401, 403, 404):
raise exc.AuthorizationFailure("You are not authorized to list "
"users.")
- # The API is inconsistent; if only one user exists, it will not return
+ # The API is inconsistent; if only one user exists, it does not return
# a list.
if "users" in resp_body:
users = resp_body["users"]
else:
- users = [resp_body]
+ users = resp_body
# The returned values may contain password data. Strip that out.
for user in users:
- bad_keys = [key for key in user.keys()
+ bad_keys = [key for key in list(user.keys())
if "password" in key.lower()]
for bad_key in bad_keys:
user.pop(bad_key)
@@ -454,10 +798,10 @@ def create_user(self, name, email, password=None, enabled=True):
"""
ADMIN ONLY. Creates a new user for this tenant (account). The username
and email address must be supplied. You may optionally supply the
- password for this user; if not, the API server will generate a password
- and return it in the 'password' attribute of the resulting User object.
- NOTE: this is the ONLY time the password will be returned; after the
- initial user creation, there is NO WAY to retrieve the user's password.
+ password for this user; if not, the API server generates a password and
+ return it in the 'password' attribute of the resulting User object.
+ NOTE: this is the ONLY time the password is returned; after the initial
+ user creation, there is NO WAY to retrieve the user's password.
You may also specify that the user should be created but not active by
passing False to the enabled parameter.
@@ -473,7 +817,7 @@ def create_user(self, name, email, password=None, enabled=True):
data["user"]["OS-KSADM:password"] = password
resp, resp_body = self.method_post("users", data=data, admin=True)
if resp.status_code == 201:
- return User(self, resp_body)
+ return User(self, resp_body.get("user", resp_body))
elif resp.status_code in (401, 403, 404):
raise exc.AuthorizationFailure("You are not authorized to create "
"users.")
@@ -487,6 +831,45 @@ def create_user(self, name, email, password=None, enabled=True):
raise exc.BadRequest(message)
+ def find_user_by_name(self, name):
+ """
+ Returns a User object by searching for the supplied user name. Returns
+ None if there is no match for the given name.
+ """
+ raise NotImplementedError("This method is not supported.")
+
+
+ def find_user_by_email(self, email):
+ """
+ Returns a User object by searching for the supplied user's email
+ address. Returns None if there is no match for the given ID.
+ """
+ raise NotImplementedError("This method is not supported.")
+
+
+ def find_user_by_id(self, uid):
+ """
+ Returns a User object by searching for the supplied user ID. Returns
+ None if there is no match for the given ID.
+ """
+ raise NotImplementedError("This method is not supported.")
+
+
+ def get_user(self, user_id=None, username=None, email=None):
+ """
+ Returns the user specified by either ID, username or email.
+
+ Since more than user can have the same email address, searching by that
+ term returns a list of 1 or more User objects. Searching by username or
+ ID returns a single User.
+
+ If a user_id that doesn't belong to the current account is searched
+ for, a Forbidden exception is raised. When searching by username or
+ email, a NotFound exception is raised if there is no matching user.
+ """
+ raise NotImplementedError("This method is not supported.")
+
+
# Can we really update the ID? Docs seem to say we can
def update_user(self, user, email=None, username=None,
uid=None, enabled=None):
@@ -542,6 +925,29 @@ def list_roles_for_user(self, user):
return roles
+ def list_credentials(self, user=None):
+ """
+ Returns a user's non-password credentials. If no user is specified, the
+ credentials for the currently authenticated user are returned.
+
+ You cannot retrieve passwords by this or any other means.
+ """
+ if not user:
+ user = self.user
+ user_id = utils.get_id(user)
+ uri = "users/%s/OS-KSADM/credentials" % user_id
+ resp, resp_body = self.method_get(uri)
+ return resp_body.get("credentials")
+
+
+ def reset_api_key(self, user=None):
+ """
+ Not available in basic Keystone identity.
+ """
+ raise NotImplementedError("The reset_api_key method is not "
+ "implemented.")
+
+
def get_tenant(self):
"""
Returns the tenant for the current user.
@@ -618,14 +1024,75 @@ def delete_tenant(self, tenant):
raise exc.TenantNotFound("Tenant '%s' does not exist." % tenant)
+ def list_roles(self, service_id=None, limit=None, marker=None):
+ """
+ Returns a list of all global roles for users, optionally limited by
+ service. Pagination can be handled through the standard 'limit' and
+ 'marker' parameters.
+ """
+ uri = "OS-KSADM/roles"
+ pagination_items = []
+ if service_id is not None:
+ pagination_items.append("serviceId=%s" % service_id)
+ if limit is not None:
+ pagination_items.append("limit=%s" % limit)
+ if marker is not None:
+ pagination_items.append("marker=%s" % marker)
+ pagination = "&".join(pagination_items)
+ if pagination:
+ uri = "%s?%s" % (uri, pagination)
+ resp, resp_body = self.method_get(uri)
+ roles = resp_body.get("roles", [])
+ return [Role(self, role) for role in roles]
+
+
+ def get_role(self, role):
+ """
+ Returns a Role object representing the specified parameter. The 'role'
+ parameter can be either an existing Role object, or the ID of the role.
+
+ If an invalid role is passed, a NotFound exception is raised.
+ """
+ uri = "OS-KSADM/roles/%s" % utils.get_id(role)
+ resp, resp_body = self.method_get(uri)
+ role = Role(self, resp_body.get("role"))
+ return role
+
+
+ def add_role_to_user(self, role, user):
+ """
+ Adds the specified role to the specified user.
+
+ There is no return value upon success. Passing a non-existent role or
+ user raises a NotFound exception.
+ """
+ uri = "users/%s/roles/OS-KSADM/%s" % (utils.get_id(user),
+ utils.get_id(role))
+ resp, resp_body = self.method_put(uri)
+
+
+ def delete_role_from_user(self, role, user):
+ """
+ Deletes the specified role from the specified user.
+
+ There is no return value upon success. Passing a non-existent role or
+ user raises a NotFound exception.
+ """
+ uri = "users/%s/roles/OS-KSADM/%s" % (utils.get_id(user),
+ utils.get_id(role))
+ resp, resp_body = self.method_delete(uri)
+
+
@staticmethod
def _parse_api_time(timestr):
"""
- Typical expiration times returned from the auth server are in this format:
+ Typical expiration times returned from the auth server are in this
+ format:
2012-05-02T14:27:40.000-05:00
They can also be returned as a UTC value in this format:
2012-05-02T14:27:40.000Z
- This method returns a proper datetime object from either of these formats.
+ This method returns a proper datetime object from either of these
+ formats.
"""
try:
reg_groups = API_DATE_PATTERN.match(timestr).groups()
diff --git a/pyrax/cf_wrapper/client.py b/pyrax/cf_wrapper/client.py
index 10bc1d7c..dbf38867 100644
--- a/pyrax/cf_wrapper/client.py
+++ b/pyrax/cf_wrapper/client.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import logging
import datetime
from functools import wraps
import hashlib
@@ -138,6 +139,13 @@ def _convert_list_last_modified_to_local(attdict):
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
@@ -893,7 +901,8 @@ def _upload_folder_in_background(self, folder_path, container, ignore,
def sync_folder_to_container(self, folder_path, container, delete=False,
- include_hidden=False, ignore=None, ignore_timestamps=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
@@ -916,22 +925,43 @@ def sync_folder_to_container(self, folder_path, container, delete=False,
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'. """
+ '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)
+ 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):
+ 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:
@@ -944,17 +974,20 @@ def _sync_folder_to_container(self, folder_path, cont, prefix, delete,
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)
+ ignore=ignore, ignore_timestamps=ignore_timestamps,
+ object_prefix=object_prefix, verbose=verbose)
continue
- self._local_files.append(os.path.join(prefix, fname))
+ 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 = cont.get_object(fullname)
+ obj = self._remote_files[fullname_with_prefix]
obj_etag = obj.etag
- except exc.NoSuchObject:
+ except KeyError:
obj = None
obj_etag = None
if local_etag != obj_etag:
@@ -968,19 +1001,29 @@ def _sync_folder_to_container(self, folder_path, cont, prefix, delete,
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, etag=local_etag,
- return_none=True)
+ 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)
+ self._delete_objects_not_in_list(cont, object_prefix)
- def _delete_objects_not_in_list(self, cont):
+ 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(full_listing=True))
+ 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
@@ -1420,12 +1463,7 @@ def cdn_request(self, method, path=[], data="", hdrs=None):
Taken directly from the cloudfiles library and modified for use here.
"""
- def quote(val):
- if isinstance(val, six.text_type):
- val = val.encode("utf-8")
- return urllib.quote(val)
-
- pth = "/".join([quote(elem) for elem in path])
+ 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)),
@@ -1546,7 +1584,7 @@ def run(self):
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 = "\n".join(obj_paths)
+ body = _quote("\n".join(obj_paths))
pth = "%s/?bulk-delete=1" % parsed.path
conn.request(method, pth, body, headers)
resp = conn.getresponse()
diff --git a/pyrax/client.py b/pyrax/client.py
index e601a754..4cd33af9 100644
--- a/pyrax/client.py
+++ b/pyrax/client.py
@@ -1,3 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
# Copyright 2010 Jacob Kaplan-Moss
# Copyright 2011 OpenStack LLC.
# Copyright 2011 Piston Cloud Computing, Inc.
@@ -20,16 +23,19 @@
OpenStack Client interface. Handles the REST calls and responses.
"""
+from __future__ import absolute_import
+
import json
import logging
import requests
import time
import urllib
-import urlparse
+from six.moves.urllib import parse as urlparse
import pyrax
import pyrax.exceptions as exc
+SAFE_QUOTE_CHARS = "/.?&=,"
class BaseClient(object):
"""
@@ -40,10 +46,11 @@ class BaseClient(object):
# Each client subclass should set their own name.
name = "base"
- def __init__(self, region_name=None, endpoint_type="publicURL",
+ def __init__(self, identity, region_name=None, endpoint_type=None,
management_url=None, service_name=None, timings=False,
verify_ssl=True, http_log_debug=False, timeout=None):
self.version = "v1.1"
+ self.identity = identity
self.region_name = region_name
self.endpoint_type = endpoint_type
self.service_name = service_name
@@ -114,7 +121,7 @@ def findall(self, **kwargs):
def unauthenticate(self):
"""Clears all of our authentication information."""
- pyrax.identity.unauthenticate()
+ self.identity.unauthenticate()
def get_timings(self):
@@ -181,7 +188,7 @@ def _api_request(self, uri, method, **kwargs):
the request after authenticating if the initial request returned
and Unauthorized exception.
"""
- id_svc = pyrax.identity
+ id_svc = self.identity
if not all((self.management_url, id_svc.token, id_svc.tenant_id)):
id_svc.authenticate()
@@ -196,11 +203,11 @@ def _api_request(self, uri, method, **kwargs):
if pos < 2:
# Don't escape the scheme or netloc
continue
- parsed[pos] = urllib.quote(parsed[pos], safe="/.?&=,")
+ parsed[pos] = urllib.quote(parsed[pos], safe=SAFE_QUOTE_CHARS)
safe_uri = urlparse.urlunparse(parsed)
else:
safe_uri = "%s%s" % (self.management_url,
- urllib.quote(uri, safe="/.?&=,"))
+ urllib.quote(uri, safe=SAFE_QUOTE_CHARS))
# 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.
@@ -258,7 +265,7 @@ def authenticate(self):
to modify this method. Please post your findings on GitHub so that
others can benefit.
"""
- return pyrax.identity.authenticate()
+ return self.identity.authenticate()
@property
@@ -267,4 +274,4 @@ def projectid(self):
The older parts of this code used 'projectid'; this wraps that
reference.
"""
- return pyrax.identity.tenant_id
+ return self.identity.tenant_id
diff --git a/pyrax/cloudblockstorage.py b/pyrax/cloudblockstorage.py
index befeb612..acc18d77 100644
--- a/pyrax/cloudblockstorage.py
+++ b/pyrax/cloudblockstorage.py
@@ -27,6 +27,7 @@
import pyrax.exceptions as exc
from pyrax.manager import BaseManager
from pyrax.resource import BaseResource
+import pyrax.utils as utils
MIN_SIZE = 100
@@ -129,7 +130,9 @@ class CloudBlockStorageVolume(BaseResource):
def __init__(self, *args, **kwargs):
super(CloudBlockStorageVolume, self).__init__(*args, **kwargs)
region = self.manager.api.region_name
- self._nova_volumes = pyrax.connect_to_cloudservers(region).volumes
+ context = self.manager.api.identity
+ cs = pyrax.connect_to_cloudservers(region=region, context=context)
+ self._nova_volumes = cs.volumes
def attach_to_instance(self, instance, mountpoint):
@@ -286,6 +289,24 @@ def create(self, *args, **kwargs):
raise
+ def update(self, volume, display_name=None, display_description=None):
+ """
+ Update the specified values on the specified volume. You may specify
+ one or more values to update.
+ """
+ uri = "/%s/%s" % (self.uri_base, utils.get_id(volume))
+ param_dict = {}
+ if display_name:
+ param_dict["display_name"] = display_name
+ if display_description:
+ param_dict["display_description"] = display_description
+ if not param_dict:
+ # Nothing to do!
+ return
+ body = {"volume": param_dict}
+ resp, resp_body = self.api.method_put(uri, body=body)
+
+
def list_snapshots(self):
"""
Pass-through method to allow the list_snapshots() call to be made
@@ -354,6 +375,24 @@ def create(self, name, volume, description=None, force=False):
return snap
+ def update(self, snapshot, display_name=None, display_description=None):
+ """
+ Update the specified values on the specified snapshot. You may specify
+ one or more values to update.
+ """
+ uri = "/%s/%s" % (self.uri_base, utils.get_id(snapshot))
+ param_dict = {}
+ if display_name:
+ param_dict["display_name"] = display_name
+ if display_description:
+ param_dict["display_description"] = display_description
+ if not param_dict:
+ # Nothing to do!
+ return
+ body = {"snapshot": param_dict}
+ resp, resp_body = self.api.method_put(uri, body=body)
+
+
class CloudBlockStorageClient(BaseClient):
"""
This is the primary class for interacting with Cloud Block Storage.
@@ -404,6 +443,16 @@ def delete_volume(self, volume, force=False):
return volume.delete(force=force)
+ @assure_volume
+ def update(self, volume, display_name=None, display_description=None):
+ """
+ Update the specified values on the specified volume. You may specify
+ one or more values to update.
+ """
+ return self._manager.update(volume, display_name=display_name,
+ display_description=display_description)
+
+
@assure_volume
def create_snapshot(self, volume, name=None, description=None, force=False):
"""
@@ -416,7 +465,25 @@ def create_snapshot(self, volume, name=None, description=None, force=False):
description=description, force=force)
+ def get_snapshot(self, snapshot):
+ """
+ Returns the snapshot with the specified snapshot ID value.
+ """
+ return self._snapshot_manager.get(snapshot)
+
+
@assure_snapshot
def delete_snapshot(self, snapshot):
"""Deletes the snapshot."""
return snapshot.delete()
+
+
+ def update_snapshot(self, snapshot, display_name=None,
+ display_description=None):
+ """
+ Update the specified values on the specified snapshot. You may specify
+ one or more values to update.
+ """
+ return self._snapshot_manager.update(snapshot,
+ display_name=display_name,
+ display_description=display_description)
diff --git a/pyrax/exceptions.py b/pyrax/exceptions.py
index f9547dd0..58808e66 100644
--- a/pyrax/exceptions.py
+++ b/pyrax/exceptions.py
@@ -245,6 +245,15 @@ class NetworkNotFound(PyraxException):
class NetworkLabelNotUnique(PyraxException):
pass
+class NoClientForService(PyraxException):
+ pass
+
+class NoEndpointForRegion(PyraxException):
+ pass
+
+class NoEndpointForService(PyraxException):
+ pass
+
class NoMoreResults(PyraxException):
pass
@@ -254,6 +263,9 @@ class NoReloadError(PyraxException):
class NoSSLTerminationConfiguration(PyraxException):
pass
+class NoSuchClient(PyraxException):
+ pass
+
class NoSuchContainer(PyraxException):
pass
diff --git a/pyrax/fakes.py b/pyrax/fakes.py
index b5b72313..89c77738 100644
--- a/pyrax/fakes.py
+++ b/pyrax/fakes.py
@@ -56,6 +56,9 @@
from pyrax.queueing import QueueManager
import pyrax.exceptions as exc
+from pyrax.base_identity import BaseIdentity
+from pyrax.base_identity import Endpoint
+from pyrax.base_identity import Service
from pyrax.identity.rax_identity import RaxIdentity
from pyrax.identity.keystone_identity import KeystoneIdentity
import pyrax.utils as utils
@@ -98,6 +101,10 @@ class FakeClient(object):
user_agent = "Fake"
USER_AGENT = "Fake"
+ def __init__(self, *args, **kwargs):
+ super(FakeClient, self).__init__(*args, **kwargs)
+ self.identity = FakeIdentity()
+
class FakeContainer(Container):
def _fetch_cdn_data(self):
@@ -165,7 +172,8 @@ def get_usage(self):
class FakeCSClient(FakeService):
def __init__(self, *args, **kwargs):
- super(FakeCSClient, self).__init__(*args, **kwargs)
+ ident = FakeIdentity()
+ super(FakeCSClient, self).__init__(ident, *args, **kwargs)
def dummy(self):
pass
@@ -202,21 +210,10 @@ def fake_run(self):
self.completed = True
-class FakeEntryPoint(object):
- def __init__(self, name):
- self.name = name
-
- def load(self):
- def dummy(*args, **kwargs):
- return self.name
- return dummy
-
-fakeEntryPoints = [FakeEntryPoint("a"), FakeEntryPoint("b"),
- FakeEntryPoint("c")]
-
-
class FakeManager(object):
- api = FakeClient()
+ def __init__(self, *args, **kwargs):
+ super(FakeManager, self).__init__(*args, **kwargs)
+ self.api = FakeClient()
def list(self):
pass
@@ -241,25 +238,6 @@ class FakeException(BaseException):
pass
-class FakeServiceCatalog(object):
- def __init__(self, *args, **kwargs):
- pass
-
- def get_token(self):
- return "fake_token"
-
- def url_for(self, attr=None, filter_value=None,
- service_type=None, endpoint_type="publicURL",
- service_name=None, volume_service_name=None):
- if filter_value == "ALL":
- raise exc.AmbiguousEndpoints
- elif filter_value == "KEY":
- raise KeyError
- elif filter_value == "EP":
- raise exc.EndpointNotFound
- return "http://example.com"
-
-
class FakeKeyring(object):
password_set = False
@@ -315,7 +293,8 @@ class FakeDatabaseClient(CloudDatabaseClient):
def __init__(self, *args, **kwargs):
self._manager = FakeDatabaseManager(self)
self._flavor_manager = FakeManager()
- super(FakeDatabaseClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeDatabaseClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -326,8 +305,9 @@ def __init__(self, *args, **kwargs):
class FakeBlockStorageManager(CloudBlockStorageManager):
def __init__(self, api=None, *args, **kwargs):
+ ident = FakeIdentity()
if api is None:
- api = FakeBlockStorageClient()
+ api = FakeBlockStorageClient(ident)
super(FakeBlockStorageManager, self).__init__(api, *args, **kwargs)
@@ -350,13 +330,15 @@ class FakeBlockStorageClient(CloudBlockStorageClient):
def __init__(self, *args, **kwargs):
self._types_manager = FakeManager()
self._snapshot_manager = FakeManager()
- super(FakeBlockStorageClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeBlockStorageClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
class FakeLoadBalancerClient(CloudLoadBalancerClient):
def __init__(self, *args, **kwargs):
- super(FakeLoadBalancerClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeLoadBalancerClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -409,7 +391,8 @@ def status(self):
class FakeDNSClient(CloudDNSClient):
def __init__(self, *args, **kwargs):
- super(FakeDNSClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeDNSClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -447,7 +430,8 @@ def __init__(self, *args, **kwargs):
class FakeCloudNetworkClient(CloudNetworkClient):
def __init__(self, *args, **kwargs):
- super(FakeCloudNetworkClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeCloudNetworkClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -463,8 +447,9 @@ def __init__(self, *args, **kwargs):
class FakeAutoScaleClient(AutoScaleClient):
def __init__(self, *args, **kwargs):
+ ident = FakeIdentity()
self._manager = FakeManager()
- super(FakeAutoScaleClient, self).__init__(*args, **kwargs)
+ super(FakeAutoScaleClient, self).__init__(ident, *args, **kwargs)
class FakeAutoScalePolicy(AutoScalePolicy):
@@ -500,7 +485,8 @@ def __init__(self, name=None, info=None, *args, **kwargs):
class FakeCloudMonitorClient(CloudMonitorClient):
def __init__(self, *args, **kwargs):
- super(FakeCloudMonitorClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeCloudMonitorClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -547,20 +533,10 @@ def __init__(self, *args, **kwargs):
**kwargs)
-class FakeQueueMessage(QueueMessage):
- def __init__(self, *args, **kwargs):
- id_ = utils.random_unicode()
- href = "http://example.com/%s" % id_
- info = kwargs.pop("info", {"href": href})
- info["name"] = utils.random_unicode()
- mgr = kwargs.pop("manager", FakeQueueManager())
- super(FakeQueueMessage, self).__init__(manager=mgr, info=info, *args,
- **kwargs)
-
-
class FakeQueueClient(QueueClient):
def __init__(self, *args, **kwargs):
- super(FakeQueueClient, self).__init__("fakeuser",
+ ident = FakeIdentity()
+ super(FakeQueueClient, self).__init__(ident, "fakeuser",
"fakepassword", *args, **kwargs)
@@ -615,7 +591,23 @@ def __init__(self, api=None, *args, **kwargs):
self.id = utils.random_ascii()
-class FakeIdentity(RaxIdentity):
+class FakeIdentityService(Service):
+ def __init__(self, *args, **kwargs):
+ self.identity = FakeIdentity()
+ self.name = "fake"
+ self.prefix = ""
+ self.service_type = "fake"
+ self.clients = {}
+ self.endpoints = utils.DotDict()
+
+
+class FakeEndpoint(Endpoint):
+ pass
+
+class FakeRaxIdentity(RaxIdentity):
+ pass
+
+class FakeIdentity(BaseIdentity):
"""Class that returns canned authentication responses."""
def __init__(self, *args, **kwargs):
super(FakeIdentity, self).__init__(*args, **kwargs)
diff --git a/pyrax/identity/keystone_identity.py b/pyrax/identity/keystone_identity.py
index a36b7013..323dcc40 100644
--- a/pyrax/identity/keystone_identity.py
+++ b/pyrax/identity/keystone_identity.py
@@ -1,12 +1,14 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+
import pyrax
-from pyrax.base_identity import BaseAuth
-import pyrax.exceptions as exc
+from ..base_identity import BaseIdentity
+from .. import exceptions as exc
-class KeystoneIdentity(BaseAuth):
+class KeystoneIdentity(BaseIdentity):
"""
Implements the Keystone-specific behaviors for Identity. In most
cases you will want to create specific subclasses to implement the
diff --git a/pyrax/identity/rax_identity.py b/pyrax/identity/rax_identity.py
index 0a622454..3fd7b629 100644
--- a/pyrax/identity/rax_identity.py
+++ b/pyrax/identity/rax_identity.py
@@ -1,17 +1,20 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from six.moves import configparser
+from __future__ import absolute_import
-from pyrax.base_identity import BaseAuth
-from pyrax.base_identity import User
-import pyrax.exceptions as exc
-import pyrax.utils as utils
+from six.moves import configparser as ConfigParser
+
+import pyrax
+from ..base_identity import BaseIdentity
+from ..base_identity import User
+from .. import exceptions as exc
+from .. import utils as utils
AUTH_ENDPOINT = "https://identity.api.rackspacecloud.com/v2.0/"
-class RaxIdentity(BaseAuth):
+class RaxIdentity(BaseIdentity):
"""
This class handles all of the authentication requirements for working
with the Rackspace Cloud.
@@ -31,12 +34,12 @@ def _read_credential_file(self, cfg):
self.username = cfg.get("rackspace_cloud", "username")
try:
self.password = cfg.get("rackspace_cloud", "api_key", raw=True)
- except configparser.NoOptionError as e:
+ except ConfigParser.NoOptionError as e:
# Allow either the use of either 'api_key' or 'password'.
self.password = cfg.get("rackspace_cloud", "password", raw=True)
- def _get_credentials(self):
+ def _format_credentials(self):
"""
Returns the current credentials in the format expected by the
authentication service. Note that by default Rackspace credentials
@@ -47,23 +50,26 @@ def _get_credentials(self):
if self._creds_style == "apikey":
return {"auth": {"RAX-KSKEY:apiKeyCredentials":
{"username": "%s" % self.username,
- "apiKey": "%s" % self.password}}}
+ "apiKey": "%s" % self.api_key}}}
else:
# Return in the default password-style
- return super(RaxIdentity, self)._get_credentials()
+ return super(RaxIdentity, self)._format_credentials()
- def authenticate(self):
+ def authenticate(self, username=None, password=None, api_key=None,
+ tenant_id=None):
"""
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.
"""
try:
- super(RaxIdentity, self).authenticate()
+ super(RaxIdentity, self).authenticate(username=username,
+ password=password, api_key=api_key, tenant_id=tenant_id)
except exc.AuthenticationFailed:
self._creds_style = "password"
- super(RaxIdentity, self).authenticate()
+ super(RaxIdentity, self).authenticate(username=username,
+ password=password, api_key=api_key, tenant_id=tenant_id)
def auth_with_token(self, token, tenant_id=None, tenant_name=None):
@@ -80,16 +86,16 @@ def auth_with_token(self, token, tenant_id=None, tenant_name=None):
# object_store endpoints. We can then add these to the initial
# endpoints returned by the primary tenant ID, and then continue with
# the auth process.
- main_resp = self._call_token_auth(token, tenant_id, tenant_name)
- main_body = main_resp.json()
+ main_resp, main_body = self._call_token_auth(token, tenant_id,
+ tenant_name)
# Get the swift tenant ID
roles = main_body["access"]["user"]["roles"]
ostore = [role for role in roles
if role["name"] == "object-store:default"]
if ostore:
ostore_tenant_id = ostore[0]["tenantId"]
- ostore_resp = self._call_token_auth(token, ostore_tenant_id, None)
- ostore_body = ostore_resp.json()
+ ostore_resp, ostore_body = self._call_token_auth(token,
+ ostore_tenant_id, None)
ostore_cat = ostore_body["access"]["serviceCatalog"]
main_cat = main_body["access"]["serviceCatalog"]
main_cat.extend(ostore_cat)
@@ -111,8 +117,15 @@ def find_user_by_name(self, name):
Returns a User object by searching for the supplied user name. Returns
None if there is no match for the given name.
"""
- uri = "users?name=%s" % name
- return self._find_user(uri)
+ return self.get_user(username=name)
+
+
+ def find_user_by_email(self, email):
+ """
+ Returns a User object by searching for the supplied user's email
+ address. Returns None if there is no match for the given ID.
+ """
+ return self.get_user(email=email)
def find_user_by_id(self, uid):
@@ -120,17 +133,42 @@ def find_user_by_id(self, uid):
Returns a User object by searching for the supplied user ID. Returns
None if there is no match for the given ID.
"""
- uri = "users/%s" % uid
- return self._find_user(uri)
+ return self.get_user(user_id=uid)
- def _find_user(self, uri):
- """Handles the 'find' code for both name and ID searches."""
+ def get_user(self, user_id=None, username=None, email=None):
+ """
+ Returns the user specified by either ID, username or email.
+
+ Since more than user can have the same email address, searching by that
+ term will return a list of 1 or more User objects. Searching by
+ username or ID will return a single User.
+
+ If a user_id that doesn't belong to the current account is searched
+ for, a Forbidden exception is raised. When searching by username or
+ email, a NotFound exception is raised if there is no matching user.
+ """
+ if user_id:
+ uri = "/users/%s" % user_id
+ elif username:
+ uri = "/users?name=%s" % username
+ elif email:
+ uri = "/users?email=%s" % email
+ else:
+ raise ValueError("You must include one of 'user_id', "
+ "'username', or 'email' when calling get_user().")
resp, resp_body = self.method_get(uri)
- if resp.status_code in (403, 404):
- return None
- user_info = resp_body["user"]
- return User(self, user_info)
+ if resp.status_code == 404:
+ raise exc.NotFound("No such user exists.")
+ users = resp_body.get("users", [])
+ if users:
+ return [User(self, user) for user in users]
+ else:
+ user = resp_body.get("user", {})
+ if user:
+ return User(self, user)
+ else:
+ raise exc.NotFound("No such user exists.")
def update_user(self, user, email=None, username=None,
@@ -151,25 +189,25 @@ def update_user(self, user, email=None, username=None,
upd["enabled"] = enabled
data = {"user": upd}
resp, resp_body = self.method_put(uri, data=data)
+ if resp.status_code in (401, 403, 404):
+ raise exc.AuthorizationFailure("You are not authorized to update "
+ "users.")
return User(self, resp_body)
- def list_credentials(self, user):
- """
- Returns a user's non-password credentials.
+ def reset_api_key(self, user=None):
"""
- user_id = utils.get_id(user)
- uri = "users/%s/OS-KSADM/credentials" % user_id
- resp, resp_body = self.method_get(uri)
- return resp_body.get("credentials")
-
+ Resets the API key for the specified user, or if no user is specified,
+ for the current user. Returns the newly-created API key.
- def get_user_credentials(self, user):
+ Resetting an API key does not invalidate any authenticated sessions,
+ nor does it revoke any tokens.
"""
- Returns a user's non-password credentials.
- """
- user_id = utils.get_id(user)
- base_uri = "users/%s/OS-KSADM/credentials/RAX-KSKEY:apiKeyCredentials"
- uri = base_uri % user_id
- resp, resp_body = self.method_get(uri)
- return resp_body
+ if user is None:
+ user_id = utils.get_id(self)
+ else:
+ user_id = utils.get_id(user)
+ uri = "users/%s/OS-KSADM/credentials/" % user_id
+ uri += "RAX-KSKEY:apiKeyCredentials/RAX-AUTH/reset"
+ resp, resp_body = self.method_post(uri)
+ return resp_body.get("RAX-KSKEY:apiKeyCredentials", {}).get("apiKey")
diff --git a/pyrax/utils.py b/pyrax/utils.py
index 8c07d7d6..194cb054 100644
--- a/pyrax/utils.py
+++ b/pyrax/utils.py
@@ -111,6 +111,32 @@ def __exit__(self, type, value, traceback):
shutil.rmtree(self.name)
+
+class DotDict(dict):
+ """
+ Dictionary subclass that allows accessing keys via dot notation.
+
+ If the key is not present, an AttributeError is raised.
+ """
+ _att_mapper = {}
+ _fail = object()
+
+ def __init__(self, *args, **kwargs):
+ super(DotDict, self).__init__(*args, **kwargs)
+
+ def __getattr__(self, att):
+ att = self._att_mapper.get(att, att)
+ ret = self.get(att, self._fail)
+ if ret is self._fail:
+ raise AttributeError("'%s' object has no attribute '%s'" %
+ (self.__class__.__name__, att))
+ return ret
+
+ __setattr__ = dict.__setitem__
+ __delattr__ = dict.__delitem__
+
+
+
def get_checksum(content, encoding="utf8", block_size=8192):
"""
Returns the MD5 checksum in hex for the given content. If 'content'
diff --git a/pyrax/version.py b/pyrax/version.py
index 36d21841..b95d72d0 100644
--- a/pyrax/version.py
+++ b/pyrax/version.py
@@ -1,4 +1,4 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-version = "1.7.3"
+version = "1.8.0"
diff --git a/tests/unit/test_autoscale.py b/tests/unit/test_autoscale.py
index f37620db..8c32ee86 100644
--- a/tests/unit/test_autoscale.py
+++ b/tests/unit/test_autoscale.py
@@ -26,7 +26,8 @@ def __init__(self, *args, **kwargs):
super(AutoscaleTest, self).__init__(*args, **kwargs)
def setUp(self):
- self.scaling_group = fakes.FakeScalingGroup()
+ self.identity = fakes.FakeIdentity()
+ self.scaling_group = fakes.FakeScalingGroup(self.identity)
def tearDown(self):
pass
diff --git a/tests/unit/test_cf_client.py b/tests/unit/test_cf_client.py
index 6b1af5a8..df7ff295 100644
--- a/tests/unit/test_cf_client.py
+++ b/tests/unit/test_cf_client.py
@@ -1326,36 +1326,22 @@ class FakeResp(object):
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
- }
-
+ head_last_modified_string)
+ attdict = {"last_modified": list_last_modified_string}
converted_list_attributes = _convert_list_last_modified_to_local(
- attdict=attdict)
-
+ attdict=attdict)
converted_list_date = converted_list_attributes["last_modified"]
-
self.assertEqual(converted_head_datetime, converted_list_date)
- def test_list_last_modified_times_does_not_round_up_for_zero_microseconds(self):
+ 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
- }
-
+ attdict = {"last_modified": list_last_modified_string}
converted_list_attributes = _convert_list_last_modified_to_local(
- attdict=attdict)
-
+ 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_client.py b/tests/unit/test_client.py
index e5c36716..d7153e42 100644
--- a/tests/unit/test_client.py
+++ b/tests/unit/test_client.py
@@ -30,10 +30,10 @@ def __init__(self, *args, **kwargs):
def setUp(self):
save_conf = client.BaseClient._configure_manager
client.BaseClient._configure_manager = Mock()
- self.client = client.BaseClient()
+ self.identity = pyrax.identity = ID_CLS()
+ self.client = client.BaseClient(self.identity)
client.BaseClient._configure_manager = save_conf
self.client._manager = fakes.FakeManager()
- self.id_svc = pyrax.identity = ID_CLS()
def tearDown(self):
self.client = None
@@ -54,7 +54,7 @@ def test_base_client(self):
save_conf = client.BaseClient._configure_manager
client.BaseClient._configure_manager = Mock()
- bc = client.BaseClient(region_name=region_name,
+ bc = client.BaseClient(identity=self.identity, region_name=region_name,
endpoint_type=endpoint_type, management_url=management_url,
service_name=service_name, timings=timings,
http_log_debug=http_log_debug, timeout=timeout,)
@@ -69,7 +69,7 @@ def test_base_client(self):
client.BaseClient._configure_manager = save_conf
def test_configure_manager(self):
- self.assertRaises(NotImplementedError, client.BaseClient)
+ self.assertRaises(NotImplementedError, client.BaseClient, self.identity)
def test_list(self):
mgr = self.client._manager
@@ -129,7 +129,7 @@ def test_findall(self):
def test_unauthenticate(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
clt.unauthenticate()
self.assertEqual(id_svc.token, "")
@@ -238,7 +238,7 @@ def test_time_request(self):
def test_api_request_expired(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_auth = id_svc.authenticate
returns = [exc.Unauthorized(""), (fakes.FakeIdentityResponse(),
fakes.fake_identity_response)]
@@ -265,7 +265,7 @@ def auth_resp(*args, **kwargs):
def test_api_request_not_authed(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_auth = id_svc.authenticate
id_svc.authenticate = Mock()
sav_req = clt.request
@@ -283,7 +283,7 @@ def test_api_request_not_authed(self):
def test_api_request_auth_failed(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_auth = id_svc.authenticate
id_svc.authenticate = Mock()
sav_req = clt.request
@@ -298,7 +298,7 @@ def test_api_request_auth_failed(self):
def test_api_request_service_unavailable(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_auth = id_svc.authenticate
id_svc.authenticate = Mock()
sav_req = clt.request
@@ -314,7 +314,7 @@ def test_api_request_service_unavailable(self):
def test_api_request_url_quoting(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_mgt = clt.management_url
clt.management_url = "/FAKE"
sav_auth = id_svc.authenticate
@@ -332,7 +332,7 @@ def test_api_request_url_quoting(self):
def test_api_request_url_safe_quoting(self):
clt = self.client
- id_svc = self.id_svc
+ id_svc = clt.identity
sav_mgt = clt.management_url
clt.management_url = "/FAKE"
sav_auth = id_svc.authenticate
@@ -404,15 +404,16 @@ def test_method_patch(self):
def test_authenticate(self):
clt = self.client
- sav_auth = pyrax.identity.authenticate
- pyrax.identity.authenticate = Mock()
+ sav_auth = clt.identity.authenticate
+ clt.identity.authenticate = Mock()
ret = clt.authenticate()
- pyrax.identity.authenticate.assert_called_once_with()
- pyrax.identity.authenticate = sav_auth
+ clt.identity.authenticate.assert_called_once_with()
+ clt.identity.authenticate = sav_auth
def test_project_id(self):
clt = self.client
- self.id_svc.tenant_id = "FAKE"
+ id_svc = clt.identity
+ id_svc.tenant_id = "FAKE"
self.assertEqual(clt.projectid, "FAKE")
diff --git a/tests/unit/test_cloud_blockstorage.py b/tests/unit/test_cloud_blockstorage.py
index 7398cb1f..51fce631 100644
--- a/tests/unit/test_cloud_blockstorage.py
+++ b/tests/unit/test_cloud_blockstorage.py
@@ -189,6 +189,27 @@ def test_create_snapshot_bad_request_other(self):
name=name, description=desc, force=False)
BaseManager.create = sav
+ def test_update_volume(self):
+ clt = self.client
+ vol = self.volume
+ mgr = clt._manager
+ mgr.api.method_put = Mock(return_value=(None, None))
+ name = utils.random_unicode()
+ desc = utils.random_unicode()
+ exp_uri = "/%s/%s" % (mgr.uri_base, vol.id)
+ exp_body = {"volume": {"display_name": name,
+ "display_description": desc}}
+ mgr.update(vol, display_name=name, display_description=desc)
+ mgr.api.method_put.assert_called_once_with(exp_uri, body=exp_body)
+
+ def test_update_volume_empty(self):
+ clt = self.client
+ vol = self.volume
+ mgr = clt._manager
+ mgr.api.method_put = Mock(return_value=(None, None))
+ mgr.update(vol)
+ self.assertEqual(mgr.api.method_put.call_count, 0)
+
def test_list_types(self):
clt = self.client
clt._types_manager.list = Mock()
@@ -469,6 +490,55 @@ def test_snapshot_description_property(self):
snap.description = nm
self.assertEqual(snap.description, snap.display_description)
+ def test_update_snapshot(self):
+ clt = self.client
+ snap = self.snapshot
+ mgr = clt._snapshot_manager
+ mgr.api.method_put = Mock(return_value=(None, None))
+ name = utils.random_unicode()
+ desc = utils.random_unicode()
+ exp_uri = "/%s/%s" % (mgr.uri_base, snap.id)
+ exp_body = {"snapshot": {"display_name": name,
+ "display_description": desc}}
+ mgr.update(snap, display_name=name, display_description=desc)
+ mgr.api.method_put.assert_called_once_with(exp_uri, body=exp_body)
+
+ def test_update_snapshot_empty(self):
+ clt = self.client
+ snap = self.snapshot
+ mgr = clt._snapshot_manager
+ mgr.api.method_put = Mock(return_value=(None, None))
+ mgr.update(snap)
+ self.assertEqual(mgr.api.method_put.call_count, 0)
+
+ def test_clt_update_volume(self):
+ clt = self.client
+ vol = self.volume
+ name = utils.random_unicode()
+ desc = utils.random_unicode()
+ clt._manager.update = Mock()
+ clt.update(vol, display_name=name, display_description=desc)
+ clt._manager.update.assert_called_once_with(vol, display_name=name,
+ display_description=desc)
+
+ def test_clt_update_snapshot(self):
+ clt = self.client
+ snap = self.snapshot
+ name = utils.random_unicode()
+ desc = utils.random_unicode()
+ clt._snapshot_manager.update = Mock()
+ clt.update_snapshot(snap, display_name=name, display_description=desc)
+ clt._snapshot_manager.update.assert_called_once_with(snap,
+ display_name=name, display_description=desc)
+
+ def test_get_snapshot(self):
+ clt = self.client
+ mgr = clt._snapshot_manager
+ mgr.get = Mock()
+ snap = utils.random_unicode()
+ clt.get_snapshot(snap)
+ mgr.get.assert_called_once_with(snap)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tests/unit/test_identity.py b/tests/unit/test_identity.py
index 987ecf3e..4ce356e9 100644
--- a/tests/unit/test_identity.py
+++ b/tests/unit/test_identity.py
@@ -10,8 +10,8 @@
import unittest
import urllib2
-from mock import patch
from mock import MagicMock as Mock
+from mock import patch
import pyrax
import pyrax.utils as utils
@@ -35,7 +35,7 @@ def __init__(self, *args, **kwargs):
super(IdentityTest, self).__init__(*args, **kwargs)
self.username = "TESTUSER"
self.password = "TESTPASSWORD"
- self.base_identity_class = pyrax.base_identity.BaseAuth
+ self.base_identity_class = base_identity.BaseIdentity
self.keystone_identity_class = pyrax.keystone_identity.KeystoneIdentity
self.rax_identity_class = pyrax.rax_identity.RaxIdentity
self.id_classes = {"keystone": self.keystone_identity_class,
@@ -45,11 +45,262 @@ def _get_clean_identity(self):
return self.rax_identity_class()
def setUp(self):
- pass
+ self.identity = fakes.FakeIdentity()
+ self.service = fakes.FakeIdentityService()
def tearDown(self):
pass
+ def test_svc_repr(self):
+ svc = self.service
+ rep = svc.__repr__()
+ self.assertTrue(svc.service_type in rep)
+
+ def test_svc_ep_for_region(self):
+ svc = self.service
+ region = utils.random_unicode().upper()
+ bad_region = utils.random_unicode().upper()
+ good_url = utils.random_unicode()
+ bad_url = utils.random_unicode()
+ good_ep = fakes.FakeEndpoint({"public_url": good_url}, svc.service_type,
+ region, self.identity)
+ bad_ep = fakes.FakeEndpoint({"public_url": bad_url}, svc.service_type,
+ bad_region, self.identity)
+ svc.endpoints = utils.DotDict({region: good_ep, bad_region: bad_ep})
+ ep = svc._ep_for_region(region)
+ self.assertEqual(ep, good_ep)
+
+ def test_svc_ep_for_region_all(self):
+ svc = self.service
+ region = "ALL"
+ good_url = utils.random_unicode()
+ bad_url = utils.random_unicode()
+ good_ep = fakes.FakeEndpoint({"public_url": good_url}, svc.service_type,
+ region, self.identity)
+ bad_ep = fakes.FakeEndpoint({"public_url": bad_url}, svc.service_type,
+ region, self.identity)
+ svc.endpoints = utils.DotDict({region: good_ep, "other": bad_ep})
+ ep = svc._ep_for_region("notthere")
+ self.assertEqual(ep, good_ep)
+
+ def test_svc_ep_for_region_not_found(self):
+ svc = self.service
+ region = utils.random_unicode().upper()
+ good_url = utils.random_unicode()
+ bad_url = utils.random_unicode()
+ good_ep = fakes.FakeEndpoint({"public_url": good_url}, svc.service_type,
+ region, self.identity)
+ bad_ep = fakes.FakeEndpoint({"public_url": bad_url}, svc.service_type,
+ region, self.identity)
+ svc.endpoints = utils.DotDict({region: good_ep, "other": bad_ep})
+ ep = svc._ep_for_region("notthere")
+ self.assertIsNone(ep)
+
+ def test_svc_get_client(self):
+ svc = self.service
+ clt = utils.random_unicode()
+ region = utils.random_unicode()
+
+ class FakeEPForRegion(object):
+ client = clt
+
+ svc._ep_for_region = Mock(return_value=FakeEPForRegion())
+ ret = svc.get_client(region)
+ self.assertEqual(ret, clt)
+
+ def test_svc_get_client_none(self):
+ svc = self.service
+ region = utils.random_unicode()
+ svc._ep_for_region = Mock(return_value=None)
+ self.assertRaises(exc.NoEndpointForRegion, svc.get_client, region)
+
+ def test_svc_regions(self):
+ svc = self.service
+ key1 = utils.random_unicode()
+ val1 = utils.random_unicode()
+ key2 = utils.random_unicode()
+ val2 = utils.random_unicode()
+ svc.endpoints = {key1: val1, key2: val2}
+ regions = svc.regions
+ self.assertEqual(len(regions), 2)
+ self.assertTrue(key1 in regions)
+ self.assertTrue(key2 in regions)
+
+ def test_ep_get_client_already_failed(self):
+ svc = self.service
+ ep_dict = {"publicURL": "http://example.com", "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ ep._client = exc.NoClientForService()
+ self.assertRaises(exc.NoClientForService, ep._get_client)
+
+ def test_ep_get_client_exists(self):
+ svc = self.service
+ ep_dict = {"publicURL": "http://example.com", "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ clt = utils.random_unicode()
+ ep._client = clt
+ ret = ep._get_client()
+ self.assertEqual(ret, clt)
+
+ def test_ep_get_client_none(self):
+ svc = self.service
+ ep_dict = {"publicURL": "http://example.com", "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ sav = pyrax.client_class_for_service
+ pyrax.client_class_for_service = Mock(return_value=None)
+ self.assertRaises(exc.NoClientForService, ep._get_client)
+ pyrax.client_class_for_service = sav
+
+ def test_ep_get_client_no_url(self):
+ svc = self.service
+ ep_dict = {"publicURL": "http://example.com", "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ sav = pyrax.client_class_for_service
+ ep.public_url = None
+ pyrax.client_class_for_service = Mock(return_value=object)
+ self.assertRaises(exc.NoEndpointForService, ep._get_client)
+ pyrax.client_class_for_service = sav
+
+ def test_ep_get_client(self):
+ svc = self.service
+ ep_dict = {"publicURL": "http://example.com", "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ sav = pyrax.client_class_for_service
+ ep.public_url = utils.random_unicode()
+ pyrax.client_class_for_service = Mock(return_value=object)
+ fake = utils.random_unicode()
+ ep._create_client = Mock(return_value=fake)
+ ret = ep._get_client()
+ self.assertEqual(ret, fake)
+ self.assertEqual(ep._client, fake)
+ pyrax.client_class_for_service = sav
+
+ def test_ep_get(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ ret = ep.get("public")
+ self.assertEqual(ret, pub)
+ ret = ep.get("private")
+ self.assertEqual(ret, priv)
+ self.assertRaises(ValueError, ep.get, "invalid")
+
+ def test_ep_getattr(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ svc_att = "exists"
+ att_val = utils.random_unicode()
+ setattr(svc, svc_att, att_val)
+ ep._get_client = Mock(return_value=svc)
+ ret = ep.exists
+ self.assertEqual(ret, att_val)
+ self.assertRaises(AttributeError, getattr, ep, "bogus")
+
+ def test_ep_client_prop(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ clt = utils.random_unicode()
+ ep._get_client = Mock(return_value=clt)
+ ret = ep.client
+ self.assertEqual(ret, clt)
+
+ def test_ep_client_private_prop(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ clt = utils.random_unicode()
+ ep._get_client = Mock(return_value=clt)
+ ret = ep.client_private
+ self.assertEqual(ret, clt)
+
+ def test_ep_create_client_obj_store(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ vssl = random.choice((True, False))
+ public = random.choice((True, False))
+ sav_gs = pyrax.get_setting
+ pyrax.get_setting = Mock(return_value=vssl)
+ sav_conn = pyrax.connect_to_cloudfiles
+ fake_client = object()
+ pyrax.connect_to_cloudfiles = Mock(return_value=fake_client)
+ ep.service = "object_store"
+ ret = ep._create_client(None, None, public)
+ self.assertEqual(ret, fake_client)
+ pyrax.connect_to_cloudfiles.assert_called_once_with(region=ep.region,
+ public=public, context=ep.identity)
+ pyrax.connect_to_cloudfiles = sav_conn
+ pyrax.get_setting = sav_gs
+
+ def test_ep_create_client_compute(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ vssl = random.choice((True, False))
+ public = random.choice((True, False))
+ sav_gs = pyrax.get_setting
+ pyrax.get_setting = Mock(return_value=vssl)
+ sav_conn = pyrax.connect_to_cloudservers
+ fake_client = object()
+ pyrax.connect_to_cloudservers = Mock(return_value=fake_client)
+ ep.service = "compute"
+ ret = ep._create_client(None, None, public)
+ self.assertEqual(ret, fake_client)
+ pyrax.connect_to_cloudservers.assert_called_once_with(region=ep.region,
+ context=ep.identity)
+ pyrax.connect_to_cloudservers = sav_conn
+ pyrax.get_setting = sav_gs
+
+ def test_ep_create_client_all_other(self):
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = utils.random_unicode().upper()
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ vssl = random.choice((True, False))
+ public = random.choice((True, False))
+ url = utils.random_unicode()
+ sav_gs = pyrax.get_setting
+ pyrax.get_setting = Mock(return_value=vssl)
+
+ class FakeClientClass(object):
+ def __init__(self, identity, region_name, management_url,
+ verify_ssl):
+ self.identity = identity
+ self.region_name = region_name
+ self.management_url = management_url
+ self.verify_ssl = verify_ssl
+
+ ret = ep._create_client(FakeClientClass, url, public)
+ self.assertTrue(isinstance(ret, FakeClientClass))
+ pyrax.get_setting = sav_gs
+
def test_init(self):
for cls in self.id_classes.values():
ident = cls(username=self.username, password=self.password)
@@ -94,6 +345,24 @@ def test_auth_with_token_id(self):
self.assertEqual(ident.tenant_id, tenant_id)
resp.content["access"]["token"]["tenant"]["id"] = sav
+ def test_auth_with_token_without_tenant_id(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ tok = utils.random_unicode()
+ tenant_id = None
+ resp = fakes.FakeIdentityResponse()
+ # Need to stuff this into the standard response
+ sav = resp.content["access"]["token"]["tenant"]["id"]
+ resp.content["access"]["token"]["tenant"]["id"] = tenant_id
+ ident.method_post = Mock(return_value=(resp, resp.json()))
+ ident.auth_with_token(tok, tenant_id=tenant_id)
+ ident.method_post.assert_called_once_with("tokens",
+ headers={'Content-Type': 'application/json', 'Accept':
+ 'application/json'}, std_headers=False, data={'auth':
+ {'token': {'id': tok}}})
+ self.assertEqual(ident.tenant_id, tenant_id)
+ resp.content["access"]["token"]["tenant"]["id"] = sav
+
def test_auth_with_token_id_auth_fail(self):
for cls in self.id_classes.values():
ident = cls()
@@ -118,12 +387,6 @@ def test_auth_with_token_id_auth_fail_general(self):
self.assertRaises(exc.AuthenticationFailed, ident.auth_with_token,
tok, tenant_id=tenant_id)
- def test_auth_with_token_missing(self):
- for cls in self.id_classes.values():
- ident = cls()
- self.assertRaises(exc.MissingAuthSettings, ident.auth_with_token,
- utils.random_unicode())
-
def test_auth_with_token_rax(self):
ident = self.rax_identity_class()
mid = utils.random_unicode()
@@ -137,15 +400,13 @@ def json(self):
return self.info
resp_main = FakeResp()
- resp_main.info = {"access": {
- "serviceCatalog": [{"a": "a", "name": "a", "type": "a"}],
+ resp_main_body = {"access": {
+ "serviceCatalog": [{"a": "a", "name": "a", "type": "a"},
+ {"b": "b", "name": "b", "type": "b"}],
"user": {"roles":
[{"tenantId": oid, "name": "object-store:default"}],
}}}
- resp_obj = FakeResp()
- resp_obj.info = {"access": {
- "serviceCatalog": [{"b": "b", "name": "b", "type": "b"}]}}
- ident._call_token_auth = Mock(side_effect=(resp_main, resp_obj))
+ ident._call_token_auth = Mock(return_value=(resp_main, resp_main_body))
def fake_parse(dct):
svcs = dct.get("access", {}).get("serviceCatalog", {})
@@ -157,7 +418,6 @@ def fake_parse(dct):
self.assertTrue("a" in pyrax.services)
self.assertTrue("b" in pyrax.services)
-
def test_set_credentials(self):
for cls in self.id_classes.values():
ident = cls()
@@ -231,11 +491,66 @@ def test_set_credential_file_keystone(self):
self.assertEqual(ident.username, user)
self.assertEqual(ident.password, password)
+ def test_keyring_auth_no_keyring(self):
+ ident = self.identity
+ sav = pyrax.base_identity.keyring
+ pyrax.base_identity.keyring = None
+ self.assertRaises(exc.KeyringModuleNotInstalled, ident.keyring_auth)
+ pyrax.base_identity.keyring = sav
+
+ def test_keyring_auth_no_username(self):
+ ident = self.identity
+ sav = pyrax.get_setting
+ pyrax.get_setting = Mock(return_value=None)
+ self.assertRaises(exc.KeyringUsernameMissing, ident.keyring_auth)
+ pyrax.get_setting = sav
+
+ def test_keyring_auth_no_password(self):
+ ident = self.identity
+ sav = pyrax.base_identity.keyring.get_password
+ pyrax.base_identity.keyring.get_password = Mock(return_value=None)
+ self.assertRaises(exc.KeyringPasswordNotFound, ident.keyring_auth,
+ "fake")
+ pyrax.base_identity.keyring.get_password = sav
+
+ def test_keyring_auth_apikey(self):
+ ident = self.identity
+ ident.authenticate = Mock()
+ sav = pyrax.base_identity.keyring.get_password
+ pw = utils.random_unicode()
+ pyrax.base_identity.keyring.get_password = Mock(return_value=pw)
+ user = utils.random_unicode()
+ ident._creds_style = "apikey"
+ ident.keyring_auth(username=user)
+ ident.authenticate.assert_called_once_with(username=user, api_key=pw)
+ pyrax.base_identity.keyring.get_password = sav
+
+ def test_keyring_auth_password(self):
+ ident = self.identity
+ ident.authenticate = Mock()
+ sav = pyrax.base_identity.keyring.get_password
+ pw = utils.random_unicode()
+ pyrax.base_identity.keyring.get_password = Mock(return_value=pw)
+ user = utils.random_unicode()
+ ident._creds_style = "password"
+ ident.keyring_auth(username=user)
+ ident.authenticate.assert_called_once_with(username=user, password=pw)
+ pyrax.base_identity.keyring.get_password = sav
+
+ def test_get_extensions(self):
+ ident = self.identity
+ v1 = utils.random_unicode()
+ v2 = utils.random_unicode()
+ resp_body = {"extensions": {"values": [v1, v2]}}
+ ident.method_get = Mock(return_value=(None, resp_body))
+ ret = ident.get_extensions()
+ self.assertEqual(ret, [v1, v2])
+
def test_get_credentials_rax(self):
ident = self.rax_identity_class(username=self.username,
- password=self.password)
+ api_key=self.password)
ident._creds_style = "apikey"
- creds = ident._get_credentials()
+ creds = ident._format_credentials()
user = creds["auth"]["RAX-KSKEY:apiKeyCredentials"]["username"]
key = creds["auth"]["RAX-KSKEY:apiKeyCredentials"]["apiKey"]
self.assertEqual(self.username, user)
@@ -245,7 +560,7 @@ def test_get_credentials_rax_password(self):
ident = self.rax_identity_class(username=self.username,
password=self.password)
ident._creds_style = "password"
- creds = ident._get_credentials()
+ creds = ident._format_credentials()
user = creds["auth"]["passwordCredentials"]["username"]
key = creds["auth"]["passwordCredentials"]["password"]
self.assertEqual(self.username, user)
@@ -254,7 +569,7 @@ def test_get_credentials_rax_password(self):
def test_get_credentials_keystone(self):
ident = self.keystone_identity_class(username=self.username,
password=self.password)
- creds = ident._get_credentials()
+ creds = ident._format_credentials()
user = creds["auth"]["passwordCredentials"]["username"]
key = creds["auth"]["passwordCredentials"]["password"]
self.assertEqual(self.username, user)
@@ -288,16 +603,44 @@ def test_authenticate_fail_other(self):
savrequest = pyrax.http.request
fake_resp = fakes.FakeIdentityResponse()
fake_resp.status_code = 500
- fake_body = fakes.fake_identity_response
- fake_resp.json = Mock(return_value={u'unauthorized': {
- u'message': u'Username or api key is invalid', u'code': 500}})
+ fake_body = {u'unauthorized': {
+ u'message': u'Username or api key is invalid', u'code': 500}}
pyrax.http.request = Mock(return_value=(fake_resp, fake_body))
self.assertRaises(exc.InternalServerError, ident.authenticate)
pyrax.http.request = savrequest
- def test_endpoint_defined(self):
- ident = self.base_identity_class()
- self.assertRaises(NotImplementedError, ident._get_auth_endpoint)
+ def test_authenticate_fail_no_message(self):
+ ident = self.rax_identity_class(username="BAD", password="BAD")
+ savrequest = pyrax.http.request
+ fake_resp = fakes.FakeIdentityResponse()
+ fake_resp.status_code = 500
+ fake_body = {u'unauthorized': {
+ u'bogus': u'Username or api key is invalid', u'code': 500}}
+ pyrax.http.request = Mock(return_value=(fake_resp, fake_body))
+ self.assertRaises(exc.InternalServerError, ident.authenticate)
+ pyrax.http.request = savrequest
+
+ def test_authenticate_fail_gt_299(self):
+ ident = self.rax_identity_class(username="BAD", password="BAD")
+ savrequest = pyrax.http.request
+ fake_resp = fakes.FakeIdentityResponse()
+ fake_resp.status_code = 444
+ fake_body = {u'unauthorized': {
+ u'message': u'Username or api key is invalid', u'code': 500}}
+ pyrax.http.request = Mock(return_value=(fake_resp, fake_body))
+ self.assertRaises(exc.AuthenticationFailed, ident.authenticate)
+ pyrax.http.request = savrequest
+
+ def test_authenticate_fail_gt_299ino_message(self):
+ ident = self.rax_identity_class(username="BAD", password="BAD")
+ savrequest = pyrax.http.request
+ fake_resp = fakes.FakeIdentityResponse()
+ fake_resp.status_code = 444
+ fake_body = {u'unauthorized': {
+ u'bogus': u'Username or api key is invalid', u'code': 500}}
+ pyrax.http.request = Mock(return_value=(fake_resp, fake_body))
+ self.assertRaises(exc.AuthenticationFailed, ident.authenticate)
+ pyrax.http.request = savrequest
def test_rax_endpoints(self):
ident = self.rax_identity_class()
@@ -311,15 +654,82 @@ def test_auth_token(self):
ident.token = test_token
self.assertEqual(ident.auth_token, test_token)
+ def test_auth_endpoint(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ test_ep = utils.random_unicode()
+ ident._get_auth_endpoint = Mock(return_value=test_ep)
+ self.assertEqual(ident.auth_endpoint, test_ep)
+
+ def test_set_auth_endpoint(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ test_ep = utils.random_unicode()
+ ident.auth_endpoint = test_ep
+ self.assertEqual(ident._auth_endpoint, test_ep)
+
def test_regions(self):
ident = self.base_identity_class()
fake_resp = fakes.FakeIdentityResponse()
ident._parse_response(fake_resp.json())
expected = ("DFW", "ORD", "SYD", "FAKE")
- self.assertEqual(len(pyrax.regions), len(expected))
+ self.assertEqual(len(ident.regions), len(expected))
for rgn in expected:
- self.assert_(rgn in pyrax.regions)
+ self.assertTrue(rgn in ident.regions)
+ def test_getattr_service(self):
+ ident = self.base_identity_class()
+ ident.authenticated = True
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = "FOO"
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ self.service.endpoints = {rgn: ep}
+ ident.services = {"fake": self.service}
+ ret = ident.fake
+ self.assertEqual(ret, self.service.endpoints)
+
+ def test_getattr_region(self):
+ ident = self.base_identity_class()
+ ident.authenticated = True
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = "FOO"
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ self.service.endpoints = {rgn: ep}
+ ident.services = {"fake": self.service}
+ ret = ident.FOO
+ self.assertEqual(ret, {"fake": ep})
+
+ def test_getattr_fail(self):
+ ident = self.base_identity_class()
+ ident.authenticated = True
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = "FOO"
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ self.service.endpoints = {rgn: ep}
+ ident.services = {"fake": self.service}
+ self.assertRaises(AttributeError, getattr, ident, "BAR")
+
+ def test_getattr_not_authed(self):
+ ident = self.base_identity_class()
+ ident.authenticated = False
+ svc = self.service
+ pub = utils.random_unicode()
+ priv = utils.random_unicode()
+ ep_dict = {"publicURL": pub, "privateURL": priv, "tenantId": "aa"}
+ rgn = "FOO"
+ ep = fakes.FakeEndpoint(ep_dict, svc, rgn, self.identity)
+ self.service.endpoints = {rgn: ep}
+ ident.services = {"fake": self.service}
+ self.assertRaises(exc.NotAuthenticated, getattr, ident, "BAR")
def test_http_methods(self):
ident = self.base_identity_class()
@@ -350,6 +760,10 @@ def test_http_methods(self):
std_headers=std_headers)
ident._call.assert_called_with("DELETE", uri, False, data,
headers, std_headers)
+ ident.method_patch(uri, admin=False, data=data, headers=headers,
+ std_headers=std_headers)
+ ident._call.assert_called_with("PATCH", uri, False, data,
+ headers, std_headers)
def test_call(self):
ident = self.base_identity_class()
@@ -410,101 +824,124 @@ def test_list_users(self):
resp.response_type = "users"
ident.method_get = Mock(return_value=(resp, resp.json()))
ret = ident.list_users()
- self.assert_(isinstance(ret, list))
+ self.assertTrue(isinstance(ret, list))
+ are_users = [isinstance(itm, pyrax.rax_identity.User) for itm in ret]
+ self.assertTrue(all(are_users))
+
+ def test_list_users_alt_body(self):
+ ident = self.rax_identity_class()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ alt = fakes.fake_identity_user_response.get("users")
+ alt[0]["password"] = "foo"
+ ident.method_get = Mock(return_value=(resp, alt))
+ ret = ident.list_users()
+ self.assertTrue(isinstance(ret, list))
are_users = [isinstance(itm, pyrax.rax_identity.User) for itm in ret]
- self.assert_(all(are_users))
+ self.assertTrue(all(are_users))
- def test_find_user(self):
+ def test_list_users_fail(self):
ident = self.rax_identity_class()
resp = fakes.FakeIdentityResponse()
resp.response_type = "users"
- ident._call = Mock(return_value=(resp, resp.json()))
- fake_uri = utils.random_unicode()
- ret = ident._find_user(fake_uri)
- self.assert_(isinstance(ret, pyrax.rax_identity.User))
+ resp.status_code = 401
+ ident.method_get = Mock(return_value=(resp, resp.json()))
+ self.assertRaises(exc.AuthorizationFailure, ident.list_users)
- def test_find_user_by_name(self):
+ def test_find_user_by_name_rax(self):
ident = self.rax_identity_class()
- ident._find_user = Mock()
+ ident.get_user = Mock()
fake_name = utils.random_unicode()
ret = ident.find_user_by_name(fake_name)
- ident._find_user.assert_called_with("users?name=%s" % fake_name)
+ ident.get_user.assert_called_with(username=fake_name)
+
+ def test_find_user_by_email_rax(self):
+ ident = self.rax_identity_class()
+ ident.get_user = Mock()
+ fake_email = utils.random_unicode()
+ ret = ident.find_user_by_email(fake_email)
+ ident.get_user.assert_called_with(email=fake_email)
- def test_find_user_by_id(self):
+ def test_find_user_by_id_rax(self):
ident = self.rax_identity_class()
- ident._find_user = Mock()
+ ident.get_user = Mock()
fake_id = utils.random_unicode()
ret = ident.find_user_by_id(fake_id)
- ident._find_user.assert_called_with("users/%s" % fake_id)
+ ident.get_user.assert_called_with(user_id=fake_id)
- def test_create_user(self):
+ def test_find_user_fail_rax(self):
ident = self.rax_identity_class()
resp = fakes.FakeIdentityResponse()
resp.response_type = "users"
- ident.method_post = Mock(return_value=(resp, resp.json()))
- fake_name = utils.random_unicode()
- fake_email = utils.random_unicode()
- fake_password = utils.random_unicode()
- ident.create_user(fake_name, fake_email, fake_password)
- cargs = ident.method_post.call_args
- self.assertEqual(len(cargs), 2)
- self.assertEqual(cargs[0], ("users", ))
- data = cargs[1]["data"]["user"]
- self.assertEqual(data["username"], fake_name)
- self.assert_(fake_password in data.values())
-
- def test_update_user(self):
+ resp.status_code = 404
+ ident.method_get = Mock(return_value=(resp, resp.json()))
+ fake_user = utils.random_unicode()
+ self.assertRaises(exc.NotFound, ident.get_user, username=fake_user)
+
+ def test_find_user_fail_base(self):
+ ident = self.identity
+ fake = utils.random_unicode()
+ self.assertRaises(NotImplementedError, ident.find_user_by_name, fake)
+ self.assertRaises(NotImplementedError, ident.find_user_by_email, fake)
+ self.assertRaises(NotImplementedError, ident.find_user_by_id, fake)
+ self.assertRaises(NotImplementedError, ident.get_user, fake)
+
+ def test_get_user_by_id(self):
ident = self.rax_identity_class()
resp = fakes.FakeIdentityResponse()
resp.response_type = "users"
- ident.method_put = Mock(return_value=(resp, resp.json()))
- fake_name = utils.random_unicode()
- fake_email = utils.random_unicode()
- fake_username = utils.random_unicode()
- fake_uid = utils.random_unicode()
- fake_region = utils.random_unicode()
- fake_enabled = random.choice((True, False))
- ident.update_user(fake_name, email=fake_email, username=fake_username,
- uid=fake_uid, defaultRegion=fake_region, enabled=fake_enabled)
- cargs = ident.method_put.call_args
- self.assertEqual(len(cargs), 2)
- self.assertEqual(cargs[0], ("users/%s" % fake_name, ))
- data = cargs[1]["data"]["user"]
- self.assertEqual(data["enabled"], fake_enabled)
- self.assertEqual(data["username"], fake_username)
- self.assert_(fake_email in data.values())
- self.assert_(fake_region in data.values())
-
-
- def test_find_user_by_name(self):
+ resp_body = resp.json().copy()
+ del resp_body["users"]
+ fake = utils.random_unicode()
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ ret = ident.get_user(user_id=fake)
+ self.assertTrue(isinstance(ret, base_identity.User))
+
+ def test_get_user_by_username(self):
ident = self.rax_identity_class()
- ident._find_user = Mock()
- fake_name = utils.random_unicode()
- ret = ident.find_user_by_name(fake_name)
- ident._find_user.assert_called_with("users?name=%s" % fake_name)
-
- def test_find_user_by_id(self):
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp_body = resp.json().copy()
+ del resp_body["users"]
+ fake = utils.random_unicode()
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ ret = ident.get_user(username=fake)
+ self.assertTrue(isinstance(ret, base_identity.User))
+
+ def test_get_user_by_email(self):
ident = self.rax_identity_class()
- ident._find_user = Mock()
- fake_id = utils.random_unicode()
- ret = ident.find_user_by_id(fake_id)
- ident._find_user.assert_called_with("users/%s" % fake_id)
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp_body = resp.json()
+ fake = utils.random_unicode()
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ ret = ident.get_user(email=fake)
+ self.assertTrue(isinstance(ret[0], base_identity.User))
- def test_find_user_fail(self):
+ def test_get_user_missing_params(self):
ident = self.rax_identity_class()
resp = fakes.FakeIdentityResponse()
resp.response_type = "users"
- resp.status_code = 404
ident.method_get = Mock(return_value=(resp, resp.json()))
- fake_uri = utils.random_unicode()
- ret = ident._find_user(fake_uri)
- self.assertIsNone(ret)
+ self.assertRaises(ValueError, ident.get_user)
+
+ def test_get_user_not_found(self):
+ ident = self.rax_identity_class()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp_body = resp.json().copy()
+ del resp_body["users"]
+ del resp_body["user"]
+ fake = utils.random_unicode()
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ self.assertRaises(exc.NotFound, ident.get_user, username=fake)
def test_create_user(self):
for cls in self.id_classes.values():
ident = cls()
resp = fakes.FakeIdentityResponse()
resp.response_type = "users"
+ resp.status_code = 201
ident.method_post = Mock(return_value=(resp, resp.json()))
fake_name = utils.random_unicode()
fake_email = utils.random_unicode()
@@ -515,7 +952,7 @@ def test_create_user(self):
self.assertEqual(cargs[0], ("users", ))
data = cargs[1]["data"]["user"]
self.assertEqual(data["username"], fake_name)
- self.assert_(fake_password in data.values())
+ self.assertTrue(fake_password in data.values())
def test_create_user_not_authorized(self):
for cls in self.id_classes.values():
@@ -530,6 +967,19 @@ def test_create_user_not_authorized(self):
self.assertRaises(exc.AuthorizationFailure, ident.create_user,
fake_name, fake_email, fake_password)
+ def test_create_user_duplicate(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 409
+ ident.method_post = Mock(return_value=(resp, resp.json()))
+ fake_name = utils.random_unicode()
+ fake_email = utils.random_unicode()
+ fake_password = utils.random_unicode()
+ self.assertRaises(exc.DuplicateUser, ident.create_user,
+ fake_name, fake_email, fake_password)
+
def test_create_user_bad_email(self):
for cls in self.id_classes.values():
ident = cls()
@@ -558,6 +1008,20 @@ def test_create_user_not_found(self):
self.assertRaises(exc.AuthorizationFailure, ident.create_user,
fake_name, fake_email, fake_password)
+ def test_create_user_other(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 400
+ resp_body = {"badRequest": {"message": "fake"}}
+ ident.method_post = Mock(return_value=(resp, resp_body))
+ fake_name = utils.random_unicode()
+ fake_email = utils.random_unicode()
+ fake_password = utils.random_unicode()
+ self.assertRaises(exc.BadRequest, ident.create_user,
+ fake_name, fake_email, fake_password)
+
def test_update_user(self):
for cls in self.id_classes.values():
ident = cls()
@@ -581,9 +1045,29 @@ def test_update_user(self):
data = cargs[1]["data"]["user"]
self.assertEqual(data["enabled"], fake_enabled)
self.assertEqual(data["username"], fake_username)
- self.assert_(fake_email in data.values())
+ self.assertTrue(fake_email in data.values())
if isinstance(ident, self.rax_identity_class):
- self.assert_(fake_region in data.values())
+ self.assertTrue(fake_region in data.values())
+
+ def test_update_user_fail(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 401
+ ident.method_put = Mock(return_value=(resp, resp.json()))
+ fake_name = utils.random_unicode()
+ fake_email = utils.random_unicode()
+ fake_username = utils.random_unicode()
+ fake_uid = utils.random_unicode()
+ fake_region = utils.random_unicode()
+ fake_enabled = random.choice((True, False))
+ kwargs = {"email": fake_email, "username": fake_username,
+ "uid": fake_uid, "enabled": fake_enabled}
+ if isinstance(ident, self.rax_identity_class):
+ kwargs["defaultRegion"] = fake_region
+ self.assertRaises(exc.AuthorizationFailure, ident.update_user,
+ fake_name, **kwargs)
def test_delete_user(self):
for cls in self.id_classes.values():
@@ -597,7 +1081,7 @@ def test_delete_user(self):
self.assertEqual(len(cargs), 2)
self.assertEqual(cargs[0], ("users/%s" % fake_name, ))
- def test_delete_user_fail(self):
+ def test_delete_user_not_found(self):
for cls in self.id_classes.values():
ident = cls()
resp = fakes.FakeIdentityResponse()
@@ -607,6 +1091,17 @@ def test_delete_user_fail(self):
fake_name = utils.random_unicode()
self.assertRaises(exc.UserNotFound, ident.delete_user, fake_name)
+ def test_delete_user_fail(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 401
+ ident.method_delete = Mock(return_value=(resp, resp.json()))
+ fake_name = utils.random_unicode()
+ self.assertRaises(exc.AuthorizationFailure, ident.delete_user,
+ fake_name)
+
def test_list_roles_for_user(self):
for cls in self.id_classes.values():
ident = cls()
@@ -621,6 +1116,16 @@ def test_list_roles_for_user(self):
self.assertTrue("name" in role)
self.assertTrue("id" in role)
+ def test_list_roles_for_user_fail(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 401
+ ident.method_get = Mock(return_value=(resp, resp.json()))
+ self.assertRaises(exc.AuthorizationFailure,
+ ident.list_roles_for_user, "fake")
+
def test_list_credentials(self):
ident = self.rax_identity_class()
resp = fakes.FakeIdentityResponse()
@@ -631,18 +1136,21 @@ def test_list_credentials(self):
ident.list_credentials(fake_name)
cargs = ident.method_get.call_args
called_uri = cargs[0][0]
- self.assert_("/credentials" in called_uri)
- self.assert_("users/%s/" % fake_name in called_uri)
+ self.assertTrue("/credentials" in called_uri)
+ self.assertTrue("users/%s/" % fake_name in called_uri)
- def test_get_user_credentials(self):
- ident = self.rax_identity_class()
- ident.method_get = Mock(return_value=(None, None))
- fake_name = utils.random_unicode()
- ident.get_user_credentials(fake_name)
+ def test_list_credentials_no_user(self):
+ ident = self.identity
+ ident.user = fakes.FakeEntity()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "users"
+ resp.status_code = 200
+ ident.method_get = Mock(return_value=(resp, resp.json()))
+ ident.list_credentials()
cargs = ident.method_get.call_args
called_uri = cargs[0][0]
- self.assert_("/credentials" in called_uri)
- self.assert_("users/%s/" % fake_name in called_uri)
+ self.assertTrue("/credentials" in called_uri)
+ self.assertTrue("users/%s/" % ident.user.id in called_uri)
def test_get_keystone_endpoint(self):
ident = self.keystone_identity_class()
@@ -691,7 +1199,7 @@ def test_has_valid_token(self):
utils.add_method(ident, lambda self: "", "_get_auth_endpoint")
ident.authenticate()
valid = ident._has_valid_token()
- self.assert_(valid)
+ self.assertTrue(valid)
ident.expires = datetime.datetime.now() - datetime.timedelta(1)
valid = ident._has_valid_token()
self.assertFalse(valid)
@@ -709,7 +1217,7 @@ def test_list_token(self):
tokens = ident.list_tokens()
ident.method_get.assert_called_with("tokens/%s" % ident.token,
admin=True)
- self.assert_("token" in tokens)
+ self.assertTrue("token" in tokens)
def test_list_token_fail(self):
for cls in self.id_classes.values():
@@ -729,7 +1237,7 @@ def test_check_token(self):
valid = ident.check_token()
ident.method_head.assert_called_with("tokens/%s" % ident.token,
admin=True)
- self.assert_(valid)
+ self.assertTrue(valid)
def test_check_token_fail_auth(self):
for cls in self.id_classes.values():
@@ -752,6 +1260,29 @@ def test_check_token_fail_valid(self):
admin=True)
self.assertFalse(valid)
+ def test_revoke_token(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "tokens"
+ token = ident.token = utils.random_unicode()
+ ident.method_delete = Mock(return_value=(resp, resp.json()))
+ valid = ident.revoke_token(token)
+ ident.method_delete.assert_called_with("tokens/%s" % ident.token,
+ admin=True)
+ self.assertTrue(valid)
+
+ def test_revoke_token_fail(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "tokens"
+ resp.status_code = 401
+ token = ident.token = utils.random_unicode()
+ ident.method_delete = Mock(return_value=(resp, resp.json()))
+ self.assertRaises(exc.AuthorizationFailure, ident.revoke_token,
+ token)
+
def test_get_token_endpoints(self):
for cls in self.id_classes.values():
ident = cls()
@@ -759,10 +1290,57 @@ def test_get_token_endpoints(self):
resp.response_type = "endpoints"
ident.method_get = Mock(return_value=(resp, resp.json()))
eps = ident.get_token_endpoints()
- self.assert_(isinstance(eps, list))
+ self.assertTrue(isinstance(eps, list))
ident.method_get.assert_called_with("tokens/%s/endpoints" %
ident.token, admin=True)
+ def test_get_token_endpoints_fail(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "endpoints"
+ resp.status_code = 401
+ ident.method_get = Mock(return_value=(resp, resp.json()))
+ self.assertRaises(exc.AuthorizationFailure,
+ ident.get_token_endpoints)
+
+ def test_reset_api_key(self):
+ ident = self.identity
+ self.assertRaises(NotImplementedError, ident.reset_api_key)
+
+ def test_reset_api_key_rax(self):
+ ident = self.rax_identity_class()
+ user = utils.random_unicode()
+ nm = utils.random_unicode()
+ key = utils.random_unicode()
+ resp = fakes.FakeResponse()
+ resp_body = {"RAX-KSKEY:apiKeyCredentials": {
+ "username": nm, "apiKey": key}}
+ ident.method_post = Mock(return_value=(resp, resp_body))
+ exp_uri = "users/%s/OS-KSADM/credentials/" % user
+ exp_uri += "RAX-KSKEY:apiKeyCredentials/RAX-AUTH/reset"
+ ret = ident.reset_api_key(user)
+ self.assertEqual(ret, key)
+ ident.method_post.assert_called_once_with(exp_uri)
+
+ @patch("pyrax.utils.get_id")
+ def test_reset_api_key_rax_no_user(self, mock_get_id):
+ ident = self.rax_identity_class()
+ user = utils.random_unicode()
+ mock_get_id.return_value = user
+ ident.authenticated = True
+ nm = utils.random_unicode()
+ key = utils.random_unicode()
+ resp = fakes.FakeResponse()
+ resp_body = {"RAX-KSKEY:apiKeyCredentials": {
+ "username": nm, "apiKey": key}}
+ ident.method_post = Mock(return_value=(resp, resp_body))
+ exp_uri = "users/%s/OS-KSADM/credentials/" % user
+ exp_uri += "RAX-KSKEY:apiKeyCredentials/RAX-AUTH/reset"
+ ret = ident.reset_api_key()
+ self.assertEqual(ret, key)
+ ident.method_post.assert_called_once_with(exp_uri)
+
def test_get_tenant(self):
for cls in self.id_classes.values():
ident = cls()
@@ -770,7 +1348,16 @@ def test_get_tenant(self):
resp.response_type = "tenants"
ident.method_get = Mock(return_value=(resp, resp.json()))
tenant = ident.get_tenant()
- self.assert_(isinstance(tenant, base_identity.Tenant))
+ self.assertTrue(isinstance(tenant, base_identity.Tenant))
+
+ def test_get_tenant_none(self):
+ for cls in self.id_classes.values():
+ ident = cls()
+ resp = fakes.FakeIdentityResponse()
+ resp.response_type = "tenants"
+ ident._list_tenants = Mock(return_value=[])
+ tenant = ident.get_tenant()
+ self.assertIsNone(tenant)
def test_list_tenants(self):
for cls in self.id_classes.values():
@@ -779,10 +1366,10 @@ def test_list_tenants(self):
resp.response_type = "tenants"
ident.method_get = Mock(return_value=(resp, resp.json()))
tenants = ident.list_tenants()
- self.assert_(isinstance(tenants, list))
+ self.assertTrue(isinstance(tenants, list))
are_tenants = [isinstance(itm, base_identity.Tenant)
for itm in tenants]
- self.assert_(all(are_tenants))
+ self.assertTrue(all(are_tenants))
def test_list_tenants_auth_fail(self):
for cls in self.id_classes.values():
@@ -811,7 +1398,7 @@ def test_create_tenant(self):
fake_name = utils.random_unicode()
fake_desc = utils.random_unicode()
tenant = ident.create_tenant(fake_name, description=fake_desc)
- self.assert_(isinstance(tenant, base_identity.Tenant))
+ self.assertTrue(isinstance(tenant, base_identity.Tenant))
cargs = ident.method_post.call_args
self.assertEqual(len(cargs), 2)
self.assertEqual(cargs[0], ("tenants", ))
@@ -830,7 +1417,7 @@ def test_update_tenant(self):
fake_desc = utils.random_unicode()
tenant = ident.update_tenant(fake_id, name=fake_name,
description=fake_desc)
- self.assert_(isinstance(tenant, base_identity.Tenant))
+ self.assertTrue(isinstance(tenant, base_identity.Tenant))
cargs = ident.method_put.call_args
self.assertEqual(len(cargs), 2)
self.assertEqual(cargs[0], ("tenants/%s" % fake_id, ))
@@ -858,6 +1445,57 @@ def test_delete_tenantfail(self):
fake_id = utils.random_unicode()
self.assertRaises(exc.TenantNotFound, ident.delete_tenant, fake_id)
+ def test_list_roles(self):
+ ident = self.identity
+ nm = utils.random_unicode()
+ id_ = utils.random_unicode()
+ svcid = utils.random_unicode()
+ limit = utils.random_unicode()
+ marker = utils.random_unicode()
+ resp = fakes.FakeResponse()
+ resp_body = {"roles": [{"name": nm, "id": id_}]}
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ exp_uri = "OS-KSADM/roles?serviceId=%s&limit=%s&marker=%s" % (svcid,
+ limit, marker)
+ ret = ident.list_roles(service_id=svcid, limit=limit, marker=marker)
+ ident.method_get.assert_called_once_with(exp_uri)
+ self.assertEqual(len(ret), 1)
+ role = ret[0]
+ self.assertTrue(isinstance(role, base_identity.Role))
+
+ def test_get_role(self):
+ ident = self.identity
+ role = utils.random_unicode()
+ nm = utils.random_unicode()
+ id_ = utils.random_unicode()
+ resp = fakes.FakeResponse()
+ resp_body = {"role": {"name": nm, "id": id_}}
+ ident.method_get = Mock(return_value=(resp, resp_body))
+ exp_uri = "OS-KSADM/roles/%s" % role
+ ret = ident.get_role(role)
+ ident.method_get.assert_called_once_with(exp_uri)
+ self.assertTrue(isinstance(ret, base_identity.Role))
+ self.assertEqual(ret.name, nm)
+ self.assertEqual(ret.id, id_)
+
+ def test_add_role_to_user(self):
+ ident = self.identity
+ role = utils.random_unicode()
+ user = utils.random_unicode()
+ ident.method_put = Mock(return_value=(None, None))
+ exp_uri = "users/%s/roles/OS-KSADM/%s" % (user, role)
+ ident.add_role_to_user(role, user)
+ ident.method_put.assert_called_once_with(exp_uri)
+
+ def test_delete_role_from_user(self):
+ ident = self.identity
+ role = utils.random_unicode()
+ user = utils.random_unicode()
+ ident.method_delete = Mock(return_value=(None, None))
+ exp_uri = "users/%s/roles/OS-KSADM/%s" % (user, role)
+ ident.delete_role_from_user(role, user)
+ ident.method_delete.assert_called_once_with(exp_uri)
+
def test_parse_api_time_us(self):
test_date = "2012-01-02T05:20:30.000-05:00"
expected = datetime.datetime(2012, 1, 2, 10, 20, 30)
diff --git a/tests/unit/test_manager.py b/tests/unit/test_manager.py
index 481fb881..c5eb79da 100644
--- a/tests/unit/test_manager.py
+++ b/tests/unit/test_manager.py
@@ -29,16 +29,23 @@ def tearDown(self):
def test_list(self):
mgr = self.manager
- sav = mgr._list
mgr._list = Mock()
mgr.uri_base = "test"
mgr.list()
mgr._list.assert_called_once_with("/test", return_raw=False)
- mgr._list = sav
+
+ def test_under_list_return_raw(self):
+ mgr = self.manager
+ uri = utils.random_unicode()
+ resp = utils.random_unicode()
+ resp_body = utils.random_unicode()
+ mgr.api.method_get = Mock(return_value=(resp, resp_body))
+ ret = mgr._list(uri, return_raw=True)
+ mgr.api.method_get.assert_called_once_with(uri)
+ self.assertEqual(ret, (resp, resp_body))
def test_list_paged(self):
mgr = self.manager
- sav = mgr._list
mgr._list = Mock()
mgr.uri_base = "test"
fake_limit = random.randint(10, 20)
@@ -46,11 +53,9 @@ def test_list_paged(self):
mgr.list(limit=fake_limit, marker=fake_marker)
expected_uri = "/test?limit=%s&marker=%s" % (fake_limit, fake_marker)
mgr._list.assert_called_once_with(expected_uri, return_raw=False)
- mgr._list = sav
def test_head(self):
mgr = self.manager
- sav = mgr._head
mgr._head = Mock()
mgr.uri_base = "test"
x = fakes.FakeException()
@@ -58,11 +63,19 @@ def test_head(self):
mgr.head(x)
expected = "/%s/%s" % ("test", x.id)
mgr._head.assert_called_once_with(expected)
- mgr._head = sav
+
+ def test_under_head(self):
+ mgr = self.manager
+ uri = utils.random_unicode()
+ resp = utils.random_unicode()
+ resp_body = utils.random_unicode()
+ mgr.api.method_head = Mock(return_value=(resp, resp_body))
+ ret = mgr._head(uri)
+ mgr.api.method_head.assert_called_once_with(uri)
+ self.assertEqual(ret, resp)
def test_get(self):
mgr = self.manager
- sav = mgr._get
mgr._get = Mock()
mgr.uri_base = "test"
x = fakes.FakeException()
@@ -70,7 +83,6 @@ def test_get(self):
mgr.get(x)
expected = "/%s/%s" % ("test", x.id)
mgr._get.assert_called_once_with(expected)
- mgr._get = sav
def test_api_get(self):
mgr = self.manager
@@ -82,7 +94,6 @@ def test_api_get(self):
def test_create(self):
mgr = self.manager
- sav = mgr._create
mgr._create = Mock()
mgr.uri_base = "test"
mgr._create_body = Mock(return_value="body")
@@ -90,11 +101,9 @@ def test_create(self):
mgr.create(nm)
mgr._create.assert_called_once_with("/test", "body", return_none=False,
return_raw=False, return_response=False)
- mgr._create = sav
def test_delete(self):
mgr = self.manager
- sav = mgr._delete
mgr._delete = Mock()
mgr.uri_base = "test"
x = fakes.FakeException()
@@ -102,7 +111,6 @@ def test_delete(self):
mgr.delete(x)
expected = "/%s/%s" % ("test", x.id)
mgr._delete.assert_called_once_with(expected)
- mgr._delete = sav
def test_under_list_post(self):
mgr = self.manager
@@ -132,7 +140,6 @@ def test_under_list_get(self):
def test_under_create_return_none(self):
mgr = self.manager
- sav_rh = mgr.run_hooks
mgr.run_hooks = Mock()
mgr.api.method_post = Mock()
resp = fakes.FakeResponse()
@@ -141,11 +148,9 @@ def test_under_create_return_none(self):
ret = mgr._create(fake_url, "", return_none=True, return_raw=False)
self.assertIsNone(ret)
mgr.api.method_post.assert_called_once_with(fake_url, body="")
- mgr.run_hooks = sav_rh
def test_under_create_return_raw(self):
mgr = self.manager
- sav_rh = mgr.run_hooks
mgr.run_hooks = Mock()
mgr.api.method_post = Mock()
resp = object()
@@ -155,11 +160,9 @@ def test_under_create_return_raw(self):
ret = mgr._create(fake_url, "", return_none=False, return_raw=True)
self.assertEqual(ret, body["fakes"])
mgr.api.method_post.assert_called_once_with(fake_url, body="")
- mgr.run_hooks = sav_rh
def test_under_create_return_resource(self):
mgr = self.manager
- sav_rh = mgr.run_hooks
mgr.run_hooks = Mock()
mgr.api.method_post = Mock()
resp = fakes.FakeResponse()
@@ -170,7 +173,6 @@ def test_under_create_return_resource(self):
ret = mgr._create(fake_url, "", return_none=False, return_raw=False)
self.assertTrue(isinstance(ret, fakes.FakeEntity))
mgr.api.method_post.assert_called_once_with(fake_url, body="")
- mgr.run_hooks = sav_rh
def test_under_delete(self):
mgr = self.manager
@@ -180,7 +182,6 @@ def test_under_delete(self):
def test_under_update(self):
mgr = self.manager
- sav_rh = mgr.run_hooks
mgr.run_hooks = Mock()
mgr.api.method_put = Mock()
resp = fakes.FakeResponse()
@@ -191,7 +192,6 @@ def test_under_update(self):
ret = mgr._update(fake_url, "")
mgr.api.method_put.assert_called_once_with(fake_url, body="")
self.assertEqual(ret, body)
- mgr.run_hooks = sav_rh
def test_action(self):
mgr = self.manager
@@ -204,30 +204,24 @@ def test_action(self):
def test_find_no_match(self):
mgr = self.manager
- sav_fa = mgr.findall
mgr.findall = Mock(return_value=[])
mgr.resource_class = fakes.FakeEntity
self.assertRaises(exc.NotFound, mgr.find)
- mgr.findall = sav_fa
def test_find_mult_match(self):
mgr = self.manager
- sav_fa = mgr.findall
mtch = fakes.FakeEntity()
mgr.resource_class = fakes.FakeEntity
mgr.findall = Mock(return_value=[mtch, mtch])
self.assertRaises(exc.NoUniqueMatch, mgr.find)
- mgr.findall = sav_fa
def test_find_single_match(self):
mgr = self.manager
- sav_fa = mgr.findall
mtch = fakes.FakeEntity()
mgr.resource_class = fakes.FakeEntity
mgr.findall = Mock(return_value=[mtch])
ret = mgr.find()
self.assertEqual(ret, mtch)
- mgr.findall = sav_fa
def test_findall(self):
mgr = self.manager
@@ -237,13 +231,11 @@ def test_findall(self):
o2.some_att = "bad"
o3 = fakes.FakeEntity()
o3.some_att = "ok"
- sav = mgr.list
mgr.list = Mock(return_value=[o1, o2, o3])
ret = mgr.findall(some_att="ok")
self.assertTrue(o1 in ret)
self.assertFalse(o2 in ret)
self.assertTrue(o3 in ret)
- mgr.list = sav
def test_findall_bad_att(self):
mgr = self.manager
@@ -253,22 +245,18 @@ def test_findall_bad_att(self):
o2.some_att = "bad"
o3 = fakes.FakeEntity()
o3.some_att = "ok"
- sav = mgr.list
mgr.list = Mock(return_value=[o1, o2, o3])
ret = mgr.findall(some_att="ok", bad_att="oops")
self.assertFalse(o1 in ret)
self.assertFalse(o2 in ret)
self.assertFalse(o3 in ret)
- mgr.list = sav
def test_add_hook(self):
mgr = self.manager
- sav = mgr._hooks_map
tfunc = Mock()
mgr.add_hook("test", tfunc)
self.assertTrue("test" in mgr._hooks_map)
self.assertTrue(tfunc in mgr._hooks_map["test"])
- mgr._hooks_map = sav
def test_run_hooks(self):
mgr = self.manager
diff --git a/tests/unit/test_module.py b/tests/unit/test_module.py
index 8eb4dc53..cf808447 100644
--- a/tests/unit/test_module.py
+++ b/tests/unit/test_module.py
@@ -28,6 +28,7 @@ def __init__(self, *args, **kwargs):
super(PyraxInitTest, self).__init__(*args, **kwargs)
self.username = "fakeuser"
self.password = "fakeapikey"
+ self.tenant_id = "faketenantid"
def setUp(self):
vers = pyrax.version.version
@@ -44,6 +45,7 @@ def setUp(self):
"tenant_name": None,
"user_agent": "pyrax/%s" % vers,
"use_servicenet": False,
+ "verify_ssl": False,
},
"alternate": {
"auth_endpoint": "ALT_AUTH",
@@ -57,6 +59,7 @@ def setUp(self):
"tenant_name": None,
"user_agent": "pyrax/%s" % vers,
"use_servicenet": False,
+ "verify_ssl": False,
}}
pyrax.identity = fakes.FakeIdentity()
pyrax.identity.authenticated = True
@@ -109,6 +112,26 @@ def fake_import(nm):
self.assertEqual(ret, cls)
pyrax.utils.import_class = sav
+ def test_create_context(self):
+ sav = pyrax._create_identity
+ pyrax._create_identity = Mock()
+ id_type = utils.random_unicode()
+ username = utils.random_unicode()
+ password = utils.random_unicode()
+ tenant_id = utils.random_unicode()
+ tenant_name = utils.random_unicode()
+ api_key = utils.random_unicode()
+ verify_ssl = utils.random_unicode()
+ pyrax.create_context(id_type=id_type, username=username,
+ password=password, tenant_id=tenant_id,
+ tenant_name=tenant_name, api_key=api_key,
+ verify_ssl=verify_ssl)
+ pyrax._create_identity.assert_called_once_with(id_type=id_type,
+ username=username, password=password, tenant_id=tenant_id,
+ tenant_name=tenant_name, api_key=api_key,
+ verify_ssl=verify_ssl, return_context=True)
+ pyrax._create_identity = sav
+
def test_settings_get(self):
def_ep = pyrax.get_setting("auth_endpoint", "default")
alt_ep = pyrax.get_setting("auth_endpoint", "alternate")
@@ -128,6 +151,47 @@ def test_settings_get_from_env(self):
pyrax._import_identity = sav_imp
os.environ = sav_env
+ def test_settings_set_bad_env(self):
+ key = utils.random_unicode()
+ val = utils.random_unicode()
+ self.assertRaises(exc.EnvironmentNotFound, pyrax.settings.set, key,
+ val, "bad_env")
+
+ def test_settings_set_bad_key(self):
+ key = utils.random_unicode()
+ val = utils.random_unicode()
+ self.assertRaises(exc.InvalidSetting, pyrax.settings.set, key, val)
+
+ def test_settings_set_region(self):
+ key = "region"
+ val = utils.random_unicode()
+ pyrax.settings.set(key, val)
+ self.assertEqual(pyrax.get_setting(key), val)
+
+ def test_settings_set_region_no_identity(self):
+ key = "region"
+ val = utils.random_unicode()
+ sav = pyrax.identity
+ pyrax.identity = None
+ ret = pyrax.settings.set(key, val)
+ self.assertIsNone(ret)
+ pyrax.identity = sav
+
+ def test_settings_set_verify_ssl(self):
+ key = "verify_ssl"
+ val = utils.random_unicode()
+ pyrax.settings.set(key, val)
+ self.assertEqual(pyrax.get_setting(key), val)
+
+ def test_settings_set_verify_ssl_no_identity(self):
+ key = "verify_ssl"
+ val = utils.random_unicode()
+ sav = pyrax.identity
+ pyrax.identity = None
+ ret = pyrax.settings.set(key, val)
+ self.assertIsNone(ret)
+ pyrax.identity = sav
+
def test_read_config(self):
dummy_cfg = fakes.fake_config_file
sav_region = pyrax.default_region
@@ -180,33 +244,35 @@ def test_set_credentials(self):
pyrax.set_credentials(self.username, self.password)
self.assertEqual(pyrax.identity.username, self.username)
self.assertEqual(pyrax.identity.password, self.password)
- self.assert_(pyrax.identity.authenticated)
+ self.assertTrue(pyrax.identity.authenticated)
def test_set_bad_credentials(self):
self.assertRaises(exc.AuthenticationFailed, pyrax.set_credentials,
"bad", "creds")
- self.assertIsNone(pyrax.identity)
+ self.assertFalse(pyrax.identity.authenticated)
def test_set_credential_file(self):
with utils.SelfDeletingTempfile() as tmpname:
with open(tmpname, "wb") as tmp:
- tmp.write("[rackspace_cloud]\n")
+ tmp.write("[keystone]\n")
tmp.write("username = %s\n" % self.username)
- tmp.write("api_key = %s\n" % self.password)
+ tmp.write("password = %s\n" % self.password)
+ tmp.write("tenant_id = %s\n" % self.tenant_id)
pyrax.set_credential_file(tmpname)
self.assertEqual(pyrax.identity.username, self.username)
self.assertEqual(pyrax.identity.password, self.password)
- self.assert_(pyrax.identity.authenticated)
+ self.assertTrue(pyrax.identity.authenticated)
def test_set_bad_credential_file(self):
with utils.SelfDeletingTempfile() as tmpname:
with open(tmpname, "wb") as tmp:
- tmp.write("[rackspace_cloud]\n")
+ tmp.write("[keystone]\n")
tmp.write("username = bad\n")
- tmp.write("api_key = creds\n")
+ tmp.write("password = creds\n")
+ tmp.write("tenant_id = stuff\n")
self.assertRaises(exc.AuthenticationFailed,
pyrax.set_credential_file, tmpname)
- self.assertIsNone(pyrax.identity)
+ self.assertFalse(pyrax.identity.authenticated)
def test_keyring_auth_no_module(self):
pyrax.keyring = None
@@ -247,7 +313,7 @@ def test_clear_credentials(self):
pyrax.cloud_loadbalancers = object()
pyrax.cloud_databases = object()
default_region = object()
- self.assert_(pyrax.identity.authenticated)
+ self.assertTrue(pyrax.identity.authenticated)
self.assertIsNotNone(pyrax.cloudfiles)
pyrax.clear_credentials()
self.assertIsNone(pyrax.identity)
@@ -322,11 +388,29 @@ def test_safe_region(self):
pyrax.identity.get_default_region = orig_defreg
pyrax.set_setting("region", orig_reg)
+ def test_safe_region_no_context(self):
+ reg = None
+ sav_ident = pyrax.identity
+ sav_create = pyrax._create_identity
+
+ def set_ident():
+ pyrax.identity = sav_ident
+
+ pyrax._create_identity = Mock(side_effect=set_ident)
+ sav_get = pyrax.settings.get
+ pyrax.settings.get = Mock(return_value=None)
+ pyrax.identity = None
+ ret = pyrax._safe_region(reg)
+ self.assertIsNotNone(ret)
+ pyrax._create_identity = sav_create
+ pyrax.identity = sav_ident
+ pyrax.settings.get = sav_get
+
def test_make_agent_name(self):
test_agent = "TEST"
ret = pyrax._make_agent_name(test_agent)
- self.assert_(ret.endswith(test_agent))
- self.assert_(ret.startswith(pyrax.USER_AGENT))
+ self.assertTrue(ret.endswith(test_agent))
+ self.assertTrue(ret.startswith(pyrax.USER_AGENT))
def test_connect_to_services(self):
pyrax.connect_to_services()
diff --git a/tests/unit/test_queues.py b/tests/unit/test_queues.py
index 981fe57b..423f1939 100644
--- a/tests/unit/test_queues.py
+++ b/tests/unit/test_queues.py
@@ -45,7 +45,8 @@ def __init__(self, *args, **kwargs):
super(QueuesTest, self).__init__(*args, **kwargs)
def setUp(self):
- self.client = fakes.FakeQueueClient()
+ self.identity = fakes.FakeIdentity()
+ self.client = fakes.FakeQueueClient(self.identity)
self.client._manager = fakes.FakeQueueManager(self.client)
self.queue = fakes.FakeQueue()
self.queue.manager = self.client._manager
@@ -562,7 +563,7 @@ def test_api_request(self):
fake_body = utils.random_ascii()
clt._time_request = Mock(return_value=(fake_resp, fake_body))
clt.management_url = utils.random_unicode()
- id_svc = pyrax.identity
+ id_svc = clt.identity
sav = id_svc.authenticate
id_svc.authenticate = Mock()
ret = clt._api_request(uri, method, **kwargs)
@@ -577,7 +578,7 @@ def test_api_request_missing_clt_id(self):
err = exc.BadRequest("400", 'The "Client-ID" header is required.')
clt._time_request = Mock(side_effect=err)
clt.management_url = utils.random_unicode()
- id_svc = pyrax.identity
+ id_svc = clt.identity
sav = id_svc.authenticate
id_svc.authenticate = Mock()
self.assertRaises(exc.QueueClientIDNotDefined, clt._api_request, uri,
@@ -592,7 +593,7 @@ def test_api_request_other_error(self):
err = exc.BadRequest("400", "Some other message")
clt._time_request = Mock(side_effect=err)
clt.management_url = utils.random_unicode()
- id_svc = pyrax.identity
+ id_svc = clt.identity
sav = id_svc.authenticate
id_svc.authenticate = Mock()
self.assertRaises(exc.BadRequest, clt._api_request, uri,
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index 1f37e5d5..6c3f3c5f 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -15,9 +15,10 @@
from mock import patch
from mock import MagicMock as Mock
-import pyrax.utils as utils
+from pyrax import base_identity
import pyrax.exceptions as exc
from pyrax import fakes
+import pyrax.utils as utils
FAKE_CONTENT = "x" * 100
@@ -54,6 +55,14 @@ def test_self_deleting_temp_directory(self):
# Directory shoud be deleted after exiting the block
self.assertFalse(os.path.exists(tmp))
+ def test_dot_dict(self):
+ key = "fake"
+ val = utils.random_unicode()
+ dct = {key: val}
+ dd = utils.DotDict(dct)
+ self.assertEqual(dd.fake, val)
+ self.assertRaises(AttributeError, getattr, dd, "bogus")
+
def test_get_checksum_from_string(self):
test = utils.random_ascii()
md = hashlib.md5()
@@ -192,7 +201,8 @@ def dummy():
self.assertTrue(utils.isunauthenticated(dummy))
def test_safe_issubclass_good(self):
- ret = utils.safe_issubclass(fakes.FakeIdentity, fakes.RaxIdentity)
+ ret = utils.safe_issubclass(fakes.FakeIdentity,
+ base_identity.BaseIdentity)
self.assertTrue(ret)
def test_safe_issubclass_bad(self):
@@ -326,6 +336,19 @@ def test_rfc2822_format_fail(self):
fmtd = utils.rfc2822_format(now)
self.assertEqual(fmtd, now)
+ def test_dict_to_qs(self):
+ k1 = utils.random_unicode()
+ v1 = utils.random_unicode()
+ k2 = utils.random_unicode()
+ v2 = None
+ k3 = utils.random_unicode()
+ v3 = utils.random_unicode()
+ dct = {k1: v1, k2: v2, k3: v3}
+ qs = utils.dict_to_qs(dct)
+ self.assertTrue("%s=%s" % (k1, v1) in qs)
+ self.assertFalse("%s=%s" % (k2, v2) in qs)
+ self.assertTrue("%s=%s" % (k3, v3) in qs)
+
def test_match_pattern(self):
ignore_pat = "*.bad"
self.assertTrue(utils.match_pattern("some.bad", ignore_pat))
|