Note: This class is in the process of being applied as the new base class for resources around the OpenStack SDK. Once that has been completed, this module will be drop the 2 suffix and be the only resource module.
Resource¶
The Resource
class is a base
class that represent a remote resource. The attributes that
comprise a request or response for this resource are specified
as class members on the Resource subclass where their values
are of a component type, including Body
,
Header
, and URI
.
For update management, Resource
employs
a series of _ComponentManager
instances
to look after the attributes of that particular component type. This is
particularly useful for Body and Header types, so that only the values
necessary are sent in requests to the server.
When making requests, each of the managers are looked at to gather the necessary URI, body, and header data to build a request to be sent via keystoneauth’s sessions. Responses from keystoneauth are then converted into this Resource class’ appropriate components and types and then returned to the caller.
Components¶
-
class
openstack.resource.
Body
(name, type=None, default=None, alias=None, aka=None, alternate_id=False, list_type=None, coerce_to_default=False, **kwargs)¶ Body attributes
A typed descriptor for a component that makes up a Resource
- Parameters
name – The name this component exists as on the server
type – The type this component is expected to be by the server. By default this is None, meaning any value you specify will work. If you specify type=dict and then set a component to a string, __set__ will fail, for example.
default – Typically None, but any other default can be set.
alias – If set, alternative attribute on object to return.
aka – If set, additional name attribute would be available under.
alternate_id – When True, this property is known internally as a value that can be sent with requests that require an ID but when id is not a name the Resource has. This is a relatively uncommon case, and this setting should only be used once per Resource.
list_type – If type is list, list_type designates what the type of the elements of the list should be.
coerce_to_default – If the Component is None or not present, force the given default to be used. If a default is not given but a type is given, construct an empty version of the type in question.
-
class
openstack.resource.
Header
(name, type=None, default=None, alias=None, aka=None, alternate_id=False, list_type=None, coerce_to_default=False, **kwargs)¶ Header attributes
A typed descriptor for a component that makes up a Resource
- Parameters
name – The name this component exists as on the server
type – The type this component is expected to be by the server. By default this is None, meaning any value you specify will work. If you specify type=dict and then set a component to a string, __set__ will fail, for example.
default – Typically None, but any other default can be set.
alias – If set, alternative attribute on object to return.
aka – If set, additional name attribute would be available under.
alternate_id – When True, this property is known internally as a value that can be sent with requests that require an ID but when id is not a name the Resource has. This is a relatively uncommon case, and this setting should only be used once per Resource.
list_type – If type is list, list_type designates what the type of the elements of the list should be.
coerce_to_default – If the Component is None or not present, force the given default to be used. If a default is not given but a type is given, construct an empty version of the type in question.
-
class
openstack.resource.
URI
(name, type=None, default=None, alias=None, aka=None, alternate_id=False, list_type=None, coerce_to_default=False, **kwargs)¶ URI attributes
A typed descriptor for a component that makes up a Resource
- Parameters
name – The name this component exists as on the server
type – The type this component is expected to be by the server. By default this is None, meaning any value you specify will work. If you specify type=dict and then set a component to a string, __set__ will fail, for example.
default – Typically None, but any other default can be set.
alias – If set, alternative attribute on object to return.
aka – If set, additional name attribute would be available under.
alternate_id – When True, this property is known internally as a value that can be sent with requests that require an ID but when id is not a name the Resource has. This is a relatively uncommon case, and this setting should only be used once per Resource.
list_type – If type is list, list_type designates what the type of the elements of the list should be.
coerce_to_default – If the Component is None or not present, force the given default to be used. If a default is not given but a type is given, construct an empty version of the type in question.
The Resource class¶
-
class
openstack.resource.
Resource
(_synchronized=False, connection=None, **attrs)¶ The base resource
- Parameters
_synchronized (bool) – This is not intended to be used directly. See
new()
andexisting()
.connection (openstack.connection.Connection) – Reference to the Connection being used. Defaults to None to allow Resource objects to be used without an active Connection, such as in unit tests. Use of
self._connection
in Resource code should protect itself with a check for None.
-
resource_key
= None¶ Singular form of key for resource.
-
resources_key
= None¶ Plural form of key for resource.
-
pagination_key
= None¶ Key used for pagination links
-
id
¶ The ID of this resource.
-
name
¶ The name of this resource.
-
location
¶ The OpenStack location of this resource.
-
base_path
= ''¶ The base part of the URI for this resource.
-
service
= None¶ The service associated with this resource to find the service URL.
-
allow_create
= False¶ Allow create operation for this resource.
-
allow_fetch
= False¶ Allow get operation for this resource.
-
allow_commit
= False¶ Allow update operation for this resource.
-
allow_delete
= False¶ Allow delete operation for this resource.
-
allow_list
= False¶ Allow list operation for this resource.
-
allow_head
= False¶ Allow head operation for this resource.
-
allow_patch
= False¶ Allow patch operation for this resource.
-
allow_empty_commit
= False¶ Commits happen without header or body being dirty.
-
commit_method
= 'PUT'¶ Method for committing a resource (PUT, PATCH, POST)
-
create_method
= 'POST'¶ Method for creating a resource (POST, PUT)
-
commit_jsonpatch
= False¶ Whether commit uses JSON patch format.
-
requires_id
= True¶ Do calls for this resource require an id
-
create_requires_id
= None¶ Whether create requires an ID (determined from method if None).
-
has_body
= True¶ Do responses for this resource have bodies
-
create_returns_body
= None¶ Does create returns a body (if False requires ID), defaults to has_body
-
microversion
= None¶ API microversion (string or None) this Resource was loaded with
-
keys
() → a set-like object providing a view on D's keys¶
-
items
() → a set-like object providing a view on D's items¶
-
classmethod
new
(**kwargs)¶ Create a new instance of this resource.
When creating the instance set the
_synchronized
parameter ofResource
toFalse
to indicate that the resource does not yet exist on the server side. This marks all attributes passed in**kwargs
as “dirty” on the resource, and thusly tracked as necessary in subsequent calls such asupdate()
.- Parameters
kwargs (dict) – Each of the named arguments will be set as attributes on the resulting Resource object.
-
classmethod
existing
(connection=None, **kwargs)¶ Create an instance of an existing remote resource.
When creating the instance set the
_synchronized
parameter ofResource
toTrue
to indicate that it represents the state of an existing server-side resource. As such, all attributes passed in**kwargs
are considered “clean”, such that an immediateupdate()
call would not generate a body of attributes to be modified on the server.- Parameters
kwargs (dict) – Each of the named arguments will be set as attributes on the resulting Resource object.
-
to_dict
(body=True, headers=True, computed=True, ignore_none=False, original_names=False, _to_munch=False)¶ Return a dictionary of this resource’s contents
- Parameters
body (bool) – Include the
Body
attributes in the returned dictionary.headers (bool) – Include the
Header
attributes in the returned dictionary.computed (bool) – Include the
Computed
attributes in the returned dictionary.ignore_none (bool) – When True, exclude key/value pairs where the value is None. This will exclude attributes that the server hasn’t returned.
original_names (bool) – When True, use attribute names as they were received from the server.
_to_munch (bool) – For internal use only. Converts to munch.Munch instead of dict.
- Returns
A dictionary of key/value pairs where keys are named as they exist as attributes of this class.
-
toDict
(body=True, headers=True, computed=True, ignore_none=False, original_names=False, _to_munch=False)¶ Return a dictionary of this resource’s contents
- Parameters
body (bool) – Include the
Body
attributes in the returned dictionary.headers (bool) – Include the
Header
attributes in the returned dictionary.computed (bool) – Include the
Computed
attributes in the returned dictionary.ignore_none (bool) – When True, exclude key/value pairs where the value is None. This will exclude attributes that the server hasn’t returned.
original_names (bool) – When True, use attribute names as they were received from the server.
_to_munch (bool) – For internal use only. Converts to munch.Munch instead of dict.
- Returns
A dictionary of key/value pairs where keys are named as they exist as attributes of this class.
-
copy
(body=True, headers=True, computed=True, ignore_none=False, original_names=False, _to_munch=False)¶ Return a dictionary of this resource’s contents
- Parameters
body (bool) – Include the
Body
attributes in the returned dictionary.headers (bool) – Include the
Header
attributes in the returned dictionary.computed (bool) – Include the
Computed
attributes in the returned dictionary.ignore_none (bool) – When True, exclude key/value pairs where the value is None. This will exclude attributes that the server hasn’t returned.
original_names (bool) – When True, use attribute names as they were received from the server.
_to_munch (bool) – For internal use only. Converts to munch.Munch instead of dict.
- Returns
A dictionary of key/value pairs where keys are named as they exist as attributes of this class.
-
create
(session, prepend_key=True, base_path=None)¶ Create a remote resource based on this instance.
- Parameters
session (
Adapter
) – The session to use for making this request.prepend_key – A boolean indicating whether the resource_key should be prepended in a resource creation request. Default to True.
base_path (str) – Base part of the URI for creating resources, if different from
base_path
.
- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_create
is not set toTrue
.
-
fetch
(session, requires_id=True, base_path=None, error_message=None, **params)¶ Get a remote resource based on this instance.
- Parameters
session (
Adapter
) – The session to use for making this request.requires_id (boolean) – A boolean indicating whether resource ID should be part of the requested URI.
base_path (str) – Base part of the URI for fetching resources, if different from
base_path
.error_message (str) – An Error message to be returned if requested object does not exist.
params (dict) – Additional parameters that can be consumed.
- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_fetch
is not set toTrue
.- Raises
ResourceNotFound
if the resource was not found.
-
head
(session, base_path=None)¶ Get headers from a remote resource based on this instance.
- Parameters
session (
Adapter
) – The session to use for making this request.base_path (str) – Base part of the URI for fetching resources, if different from
base_path
.
- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_head
is not set toTrue
.- Raises
ResourceNotFound
if the resource was not found.
-
property
requires_commit
¶ Whether the next commit() call will do anything.
-
commit
(session, prepend_key=True, has_body=True, retry_on_conflict=None, base_path=None)¶ Commit the state of the instance to the remote resource.
- Parameters
session (
Adapter
) – The session to use for making this request.prepend_key – A boolean indicating whether the resource_key should be prepended in a resource update request. Default to True.
retry_on_conflict (bool) – Whether to enable retries on HTTP CONFLICT (409). Value of
None
leaves the Adapter defaults.base_path (str) – Base part of the URI for modifying resources, if different from
base_path
.
- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_commit
is not set toTrue
.
-
patch
(session, patch=None, prepend_key=True, has_body=True, retry_on_conflict=None, base_path=None)¶ Patch the remote resource.
Allows modifying the resource by providing a list of JSON patches to apply to it. The patches can use both the original (server-side) and SDK field names.
- Parameters
session (
Adapter
) – The session to use for making this request.patch – Additional JSON patch as a list or one patch item. If provided, it is applied on top of any changes to the current resource.
prepend_key – A boolean indicating whether the resource_key should be prepended in a resource update request. Default to True.
retry_on_conflict (bool) – Whether to enable retries on HTTP CONFLICT (409). Value of
None
leaves the Adapter defaults.base_path (str) – Base part of the URI for modifying resources, if different from
base_path
.
- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_patch
is not set toTrue
.
-
delete
(session, error_message=None)¶ Delete the remote resource based on this instance.
- Parameters
session (
Adapter
) – The session to use for making this request.- Returns
This
Resource
instance.- Raises
MethodNotSupported
ifResource.allow_commit
is not set toTrue
.- Raises
ResourceNotFound
if the resource was not found.
-
classmethod
list
(session, paginated=True, base_path=None, allow_unknown_params=False, **params)¶ This method is a generator which yields resource objects.
This resource object list generator handles pagination and takes query params for response filtering.
- Parameters
session (
Adapter
) – The session to use for making this request.paginated (bool) –
True
if a GET to this resource returns a paginated series of responses, orFalse
if a GET returns only one page of data. When paginated is False only one page of data will be returned regardless of the API’s support of pagination.base_path (str) – Base part of the URI for listing resources, if different from
base_path
.allow_unknown_params (bool) –
True
to accept, but discard unknown query parameters. This allows getting list of ‘filters’ and passing everything known to the server.False
will result in validation exception when unknown query parameters are passed.params (dict) – These keyword arguments are passed through the
_transpose()
method to find if any of them match expected query parameters to be sent in the params argument toget()
. They are additionally checked against thebase_path
format string to see if any path fragments need to be filled in by the contents of this argument.
- Returns
A generator of
Resource
objects.- Raises
MethodNotSupported
ifResource.allow_list
is not set toTrue
.- Raises
InvalidResourceQuery
if query contains invalid params.
-
classmethod
find
(session, name_or_id, ignore_missing=True, **params)¶ Find a resource by its name or id.
- Parameters
session (
Adapter
) – The session to use for making this request.name_or_id – This resource’s identifier, if needed by the request. The default is
None
.ignore_missing (bool) – When set to
False
ResourceNotFound
will be raised when the resource does not exist. When set toTrue
, None will be returned when attempting to find a nonexistent resource.params (dict) – Any additional parameters to be passed into underlying methods, such as to
existing()
in order to pass on URI parameters.
- Returns
The
Resource
object matching the given name or id or None if nothing matches.- Raises
openstack.exceptions.DuplicateResource
if more than one resource is found for this request.- Raises
openstack.exceptions.ResourceNotFound
if nothing is found and ignore_missing isFalse
.