diff --git a/openstack/metric/v1/resource.py b/openstack/metric/v1/resource.py new file mode 100644 index 00000000..6d29aee3 --- /dev/null +++ b/openstack/metric/v1/resource.py @@ -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 diff --git a/openstack/resource_types.py b/openstack/resource_types.py new file mode 100644 index 00000000..ef99d955 --- /dev/null +++ b/openstack/resource_types.py @@ -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) diff --git a/openstack/tests/metric/v1/test_resource.py b/openstack/tests/metric/v1/test_resource.py new file mode 100644 index 00000000..cd325d3e --- /dev/null +++ b/openstack/tests/metric/v1/test_resource.py @@ -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)