Files
openstacksdk/openstack/metric/v1/resource.py
Brian Curtin 4484f4fce1 Add ISO8601 formatter as a type for properties
While thinking about the type=Resource changes that we're undergoing, a
common type that we could be improving for users are timestamps. If a
user is going to use a timestamp for anything -- the common ones being
the timestamp of when a resource was created or updated -- they're going
to need to convert it to a datetime anyway in order to look into it.

By far the most common timestamp format coming back in responses and
being accepted in requests is an ISO 8601 string. We had previously been
depending on the oslo_utils.timeutils library to handle a form of this
type of behavior for the metric resource, but it was limited in its
functionality as well as only being used by metric. This approach makes
the idea more generally useful.

Additionaly, this approach can be applied to the BoolStr class which had
previously existed to handle the case of some services returning "true"
and "false" in responses. This required a special case inside the prop
code to look for a "parsed" attribute. Changing the BoolStr class to
work with the Formatter base allows both BoolStr and ISO8601 to use the
same code paths.

This change doesn't make any wholesale changes to implement
type=format.ISO8601. Those should be handled in a separate change once
the implementation is approved.

Change-Id: I37e99afcf3a0eca7c806e9dea984f3059f677ec4
2016-01-20 19:57:30 -06:00

53 lines
1.9 KiB
Python

# 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 format
from openstack.metric import metric_service
from openstack import resource
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
#: The identifier of this resource
id = resource.prop('id', alias="resource_id")
#: The ID of the user who created this resource
created_by_user_id = resource.prop('created_by_user_id')
#: The ID of the project this resource was created under
created_by_project_id = resource.prop('created_by_project_id')
#: The ID of the user
user_id = resource.prop('user_id')
#: The ID of the project
project_id = resource.prop('project_id')
#: Timestamp when this resource was started
started_at = resource.prop('started_at',
type=format.ISO8601)
#: Timestamp when this resource was ended
ended_at = resource.prop('ended_at',
type=format.ISO8601)
#: A dictionary of metrics collected on this resource
metrics = resource.prop('metrics', type=dict)
def create(self, session):
resp = self.create_by_id(session, self._attrs)
self._attrs[self.id_attribute] = resp[self.id_attribute]
self._reset_dirty()
return self