Merge "metric: add support for generic resources"
This commit is contained in:
44
openstack/metric/v1/resource.py
Normal file
44
openstack/metric/v1/resource.py
Normal file
@@ -0,0 +1,44 @@
|
||||
# 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.metric import metric_service
|
||||
from openstack import resource
|
||||
from openstack import resource_types
|
||||
|
||||
|
||||
class Generic(resource.Resource):
|
||||
base_path = '/resource/generic'
|
||||
service = metric_service.MetricService()
|
||||
|
||||
# Supported Operations
|
||||
allow_create = True
|
||||
allow_retrieve = True
|
||||
allow_delete = True
|
||||
allow_list = True
|
||||
allow_update = True
|
||||
|
||||
# Properties
|
||||
id = resource.prop('id', alias="resource_id")
|
||||
created_by_user_id = resource.prop('created_by_user_id')
|
||||
created_by_project_id = resource.prop('created_by_project_id')
|
||||
user_id = resource.prop('user_id')
|
||||
project_id = resource.prop('project_id')
|
||||
started_at = resource.prop('started_at',
|
||||
type=resource_types.ISO8601Datetime)
|
||||
ended_at = resource.prop('ended_at',
|
||||
type=resource_types.ISO8601Datetime)
|
||||
metrics = resource.prop('metrics', type=dict)
|
||||
|
||||
def create(self, session):
|
||||
resp = self.create_by_id(session, self._attrs, None, path_args=self)
|
||||
self._attrs[self.id_attribute] = resp[self.id_attribute]
|
||||
self._reset_dirty()
|
||||
return self
|
20
openstack/resource_types.py
Normal file
20
openstack/resource_types.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
import datetime
|
||||
|
||||
from oslo_utils import timeutils
|
||||
|
||||
|
||||
class ISO8601Datetime(datetime.datetime):
|
||||
def __new__(cls, s):
|
||||
if s:
|
||||
return timeutils.parse_isotime(s)
|
59
openstack/tests/metric/v1/test_resource.py
Normal file
59
openstack/tests/metric/v1/test_resource.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
import datetime
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.metric.v1 import resource
|
||||
|
||||
|
||||
EXAMPLE_GENERIC = {
|
||||
"created_by_user_id": "5521eab6-a3bc-4841-b253-d62871b65e76",
|
||||
"started_at": "2015-03-09T12:14:57.233772",
|
||||
"user_id": None,
|
||||
"created_by_project_id": "41649c3e-5f7a-41d1-81fb-2efa76c09e6c",
|
||||
"metrics": {},
|
||||
"ended_at": None,
|
||||
"project_id": None,
|
||||
"type": "generic",
|
||||
"id": "a8d5e83b-0320-45ce-8282-7c8ad8fb8bf6",
|
||||
}
|
||||
|
||||
|
||||
class TestResource(testtools.TestCase):
|
||||
def test_generic(self):
|
||||
m = resource.Generic()
|
||||
self.assertIsNone(m.resource_key)
|
||||
self.assertIsNone(m.resources_key)
|
||||
self.assertEqual('/resource/generic', m.base_path)
|
||||
self.assertEqual('metric', m.service.service_type)
|
||||
self.assertTrue(m.allow_create)
|
||||
self.assertTrue(m.allow_retrieve)
|
||||
self.assertTrue(m.allow_update)
|
||||
self.assertTrue(m.allow_delete)
|
||||
self.assertTrue(m.allow_list)
|
||||
|
||||
def test_make_generic(self):
|
||||
r = resource.Generic(EXAMPLE_GENERIC)
|
||||
self.assertEqual(EXAMPLE_GENERIC['created_by_user_id'],
|
||||
r.created_by_user_id)
|
||||
self.assertEqual(EXAMPLE_GENERIC['created_by_project_id'],
|
||||
r.created_by_project_id)
|
||||
self.assertEqual(EXAMPLE_GENERIC['user_id'], r.user_id)
|
||||
self.assertEqual(EXAMPLE_GENERIC['project_id'], r.project_id)
|
||||
self.assertEqual(EXAMPLE_GENERIC['type'], r.type)
|
||||
self.assertEqual(EXAMPLE_GENERIC['id'], r.id)
|
||||
self.assertEqual(EXAMPLE_GENERIC['metrics'], r.metrics)
|
||||
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
|
||||
tzinfo=None)
|
||||
self.assertEqual(dt, r.started_at.replace(tzinfo=None))
|
||||
self.assertEqual(EXAMPLE_GENERIC['ended_at'], r.ended_at)
|
Reference in New Issue
Block a user