Use Resource() class from common Oslo code

In the process of unification of the clients code we should
reuse common functionality from Oslo. Resource() class from ceilometer
duplicates Oslo funclionality, so we replace it with inheritance

Change-Id: I4e4b83252cdc87e8484d15e351cd5dab08f3ed8a
This commit is contained in:
ekudryashova
2013-12-18 15:48:56 +02:00
parent d663570b77
commit 1fe2e7f8d3

View File

@@ -18,8 +18,8 @@ Base utilities to build API operation managers and objects on top of.
"""
import copy
import six
from ceilometerclient.openstack.common.apiclient import base
# Python 2.4 compat
try:
@@ -81,7 +81,7 @@ class Manager(object):
self.api.raw_request('DELETE', url)
class Resource(object):
class Resource(base.Resource):
"""A resource represents a particular instance of an object (tenant, user,
etc). This is pretty much just a bag for attributes.
@@ -89,55 +89,6 @@ class Resource(object):
:param info: dictionary representing resource attributes
:param loaded: prevent lazy-loading if set to True
"""
def __init__(self, manager, info, loaded=False):
self.manager = manager
self._info = info
self._add_details(info)
self._loaded = loaded
def _add_details(self, info):
for (k, v) in six.iteritems(info):
setattr(self, k, v)
def __getattr__(self, k):
if k not in self.__dict__:
# NOTE(bcwaldon): disallow lazy-loading if already loaded once
if not self.is_loaded():
self.get()
return self.__getattr__(k)
raise AttributeError(k)
else:
return self.__dict__[k]
def __repr__(self):
reprkeys = sorted(k for k in self.__dict__.keys() if k[0] != '_' and
k != 'manager')
info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
return "<%s %s>" % (self.__class__.__name__, info)
def get(self):
# set_loaded() first ... so if we have to bail, we know we tried.
self.set_loaded(True)
if not hasattr(self.manager, 'get'):
return
new = self.manager.get(self.id)
if new:
self._add_details(new._info)
def __eq__(self, other):
if not isinstance(other, self.__class__):
return False
if hasattr(self, 'id') and hasattr(other, 'id'):
return self.id == other.id
return self._info == other._info
def is_loaded(self):
return self._loaded
def set_loaded(self, val):
self._loaded = val
def to_dict(self):
return copy.deepcopy(self._info)