Add registered limit CRUD support
Add unified limit CRUD support. This patch is the registered limit part. Change-Id: I6ccb00181782e8a8550fc7a51f2ceba7778a46f7
This commit is contained in:
parent
2801536e83
commit
b36487a1c3
|
@ -18,6 +18,7 @@ from openstack.identity.v3 import group as _group
|
|||
from openstack.identity.v3 import policy as _policy
|
||||
from openstack.identity.v3 import project as _project
|
||||
from openstack.identity.v3 import region as _region
|
||||
from openstack.identity.v3 import registered_limit as _registered_limit
|
||||
from openstack.identity.v3 import role as _role
|
||||
from openstack.identity.v3 import role_assignment as _role_assignment
|
||||
from openstack.identity.v3 import role_domain_group_assignment \
|
||||
|
@ -972,3 +973,77 @@ class Proxy(proxy.Proxy):
|
|||
"""
|
||||
return self._list(_role_assignment.RoleAssignment,
|
||||
paginated=False, **query)
|
||||
|
||||
def registered_limits(self, **query):
|
||||
"""Retrieve a generator of registered_limits
|
||||
|
||||
:param kwargs \*\*query: Optional query parameters to be sent to limit
|
||||
the registered_limits being returned.
|
||||
|
||||
:returns: A generator of registered_limits instances.
|
||||
:rtype: :class:
|
||||
`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
"""
|
||||
return self._list(_registered_limit.RegisteredLimit, paginated=False,
|
||||
**query)
|
||||
|
||||
def get_registered_limit(self, registered_limit):
|
||||
"""Get a single registered_limit
|
||||
|
||||
:param registered_limit: The value can be the ID of a registered_limit
|
||||
or a :class:
|
||||
`~openstack.identity.v3.registered_limit.RegisteredLimit` instance.
|
||||
|
||||
:returns: One :class:
|
||||
`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||||
when no resource can be found.
|
||||
"""
|
||||
return self._get(_registered_limit.RegisteredLimit, registered_limit)
|
||||
|
||||
def create_registered_limit(self, **attrs):
|
||||
"""Create a new registered_limit from attributes
|
||||
|
||||
:param dict attrs: Keyword arguments which will be used to create
|
||||
a :class:`~openstack.identity.v3.registered_limit.RegisteredLimit`,
|
||||
comprised of the properties on the RegisteredLimit class.
|
||||
|
||||
:returns: The results of registered_limit creation.
|
||||
:rtype: :class:
|
||||
`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
"""
|
||||
return self._create(_registered_limit.RegisteredLimit, **attrs)
|
||||
|
||||
def update_registered_limit(self, registered_limit, **attrs):
|
||||
"""Update a registered_limit
|
||||
|
||||
:param registered_limit: Either the ID of a registered_limit. or a
|
||||
:class:`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
instance.
|
||||
:param dict kwargs: The attributes to update on the registered_limit
|
||||
represented by ``value``.
|
||||
|
||||
:returns: The updated registered_limit.
|
||||
:rtype: :class:
|
||||
`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
"""
|
||||
return self._update(_registered_limit.RegisteredLimit,
|
||||
registered_limit, **attrs)
|
||||
|
||||
def delete_registered_limit(self, registered_limit, ignore_missing=True):
|
||||
"""Delete a registered_limit
|
||||
|
||||
:param registered_limit: The value can be either the ID of a
|
||||
registered_limit or a
|
||||
:class:`~openstack.identity.v3.registered_limit.RegisteredLimit`
|
||||
instance.
|
||||
:param bool ignore_missing: When set to ``False``
|
||||
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
|
||||
the registered_limit does not exist. When set to ``True``, no
|
||||
exception will be thrown when attempting to delete a nonexistent
|
||||
registered_limit.
|
||||
|
||||
:returns: ``None``
|
||||
"""
|
||||
self._delete(_registered_limit.RegisteredLimit, registered_limit,
|
||||
ignore_missing=ignore_missing)
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from openstack import resource
|
||||
|
||||
|
||||
class RegisteredLimit(resource.Resource):
|
||||
resource_key = 'registered_limit'
|
||||
resources_key = 'registered_limits'
|
||||
base_path = '/registered_limits'
|
||||
|
||||
# capabilities
|
||||
allow_create = True
|
||||
allow_fetch = True
|
||||
allow_commit = True
|
||||
allow_delete = True
|
||||
allow_list = True
|
||||
commit_method = 'PATCH'
|
||||
commit_jsonpatch = True
|
||||
|
||||
_query_mapping = resource.QueryParameters(
|
||||
'service_id', 'region_id', 'resource_name')
|
||||
|
||||
# Properties
|
||||
#: User-facing description of the registered_limit. *Type: string*
|
||||
description = resource.Body('description')
|
||||
#: The links for the registered_limit resource.
|
||||
links = resource.Body('links')
|
||||
#: ID of service. *Type: string*
|
||||
service_id = resource.Body('service_id')
|
||||
#: ID of region, if any. *Type: string*
|
||||
region_id = resource.Body('region_id')
|
||||
#: The resource name. *Type: string*
|
||||
resource_name = resource.Body('resource_name')
|
||||
#: The default limit value. *Type: int*
|
||||
default_limit = resource.Body('default_limit')
|
||||
|
||||
def _prepare_request_body(self, patch, prepend_key):
|
||||
body = self._body.dirty
|
||||
if prepend_key and self.resource_key is not None:
|
||||
if patch:
|
||||
body = {self.resource_key: body}
|
||||
else:
|
||||
# Keystone support bunch create for unified limit. So the
|
||||
# request body for creating registered_limit is a list instead
|
||||
# of dict.
|
||||
body = {self.resources_key: [body]}
|
||||
return body
|
|
@ -842,6 +842,16 @@ class Resource(dict):
|
|||
return munch.Munch(self.to_dict(body=True, headers=False,
|
||||
original_names=True))
|
||||
|
||||
def _prepare_request_body(self, patch, prepend_key):
|
||||
if patch:
|
||||
new = self._body.attributes
|
||||
body = jsonpatch.make_patch(self._original_body, new).patch
|
||||
else:
|
||||
body = self._body.dirty
|
||||
if prepend_key and self.resource_key is not None:
|
||||
body = {self.resource_key: body}
|
||||
return body
|
||||
|
||||
def _prepare_request(self, requires_id=None, prepend_key=False,
|
||||
patch=False):
|
||||
"""Prepare a request to be sent to the server
|
||||
|
@ -861,13 +871,7 @@ class Resource(dict):
|
|||
if requires_id is None:
|
||||
requires_id = self.requires_id
|
||||
|
||||
if patch:
|
||||
new = self._body.attributes
|
||||
body = jsonpatch.make_patch(self._original_body, new).patch
|
||||
else:
|
||||
body = self._body.dirty
|
||||
if prepend_key and self.resource_key is not None:
|
||||
body = {self.resource_key: body}
|
||||
body = self._prepare_request_body(patch, prepend_key)
|
||||
|
||||
# TODO(mordred) Ensure headers have string values better than this
|
||||
headers = {}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from openstack.tests.unit import base
|
||||
|
||||
from openstack.identity.v3 import registered_limit
|
||||
|
||||
EXAMPLE = {
|
||||
"service_id": "8ac43bb0926245cead88676a96c750d3",
|
||||
"region_id": 'RegionOne',
|
||||
"resource_name": 'cores',
|
||||
"default_limit": 10,
|
||||
"description": "compute cores",
|
||||
"links": {"self": "http://example.com/v3/registered_limit_1"}
|
||||
}
|
||||
|
||||
|
||||
class TestRegistered_limit(base.TestCase):
|
||||
|
||||
def test_basic(self):
|
||||
sot = registered_limit.RegisteredLimit()
|
||||
self.assertEqual('registered_limit', sot.resource_key)
|
||||
self.assertEqual('registered_limits', sot.resources_key)
|
||||
self.assertEqual('/registered_limits', sot.base_path)
|
||||
self.assertTrue(sot.allow_create)
|
||||
self.assertTrue(sot.allow_fetch)
|
||||
self.assertTrue(sot.allow_commit)
|
||||
self.assertTrue(sot.allow_delete)
|
||||
self.assertTrue(sot.allow_list)
|
||||
self.assertEqual('PATCH', sot.commit_method)
|
||||
|
||||
self.assertDictEqual(
|
||||
{
|
||||
'service_id': 'service_id',
|
||||
'region_id': 'region_id',
|
||||
'resource_name': 'resource_name',
|
||||
'marker': 'marker',
|
||||
'limit': 'limit'
|
||||
},
|
||||
sot._query_mapping._mapping)
|
||||
|
||||
def test_make_it(self):
|
||||
sot = registered_limit.RegisteredLimit(**EXAMPLE)
|
||||
self.assertEqual(EXAMPLE['service_id'], sot.service_id)
|
||||
self.assertEqual(EXAMPLE['region_id'], sot.region_id)
|
||||
self.assertEqual(EXAMPLE['resource_name'], sot.resource_name)
|
||||
self.assertEqual(EXAMPLE['default_limit'], sot.default_limit)
|
||||
self.assertEqual(EXAMPLE['description'], sot.description)
|
||||
self.assertEqual(EXAMPLE['links'], sot.links)
|
Loading…
Reference in New Issue