summaryrefslogtreecommitdiff
path: root/keystoneclient/openstack/common/apiclient/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'keystoneclient/openstack/common/apiclient/base.py')
-rw-r--r--keystoneclient/openstack/common/apiclient/base.py102
1 files changed, 7 insertions, 95 deletions
diff --git a/keystoneclient/openstack/common/apiclient/base.py b/keystoneclient/openstack/common/apiclient/base.py
index 9300c2e..5612c22 100644
--- a/keystoneclient/openstack/common/apiclient/base.py
+++ b/keystoneclient/openstack/common/apiclient/base.py
@@ -33,18 +33,22 @@ Base utilities to build API operation managers and objects on top of.
#
########################################################################
+########################################################################
+# NOTE(blk-u): This module is not being synced with oslo-incubator
+# anymore. We need to deprecate property and get rid of it.
+########################################################################
+
# E1102: %s is not callable
# pylint: disable=E1102
import abc
-import copy
-from oslo_utils import strutils
import six
from six.moves.urllib import parse
from keystoneclient.openstack.common._i18n import _
+from keystoneclient import base as _base
from keystoneclient.openstack.common.apiclient import exceptions
@@ -437,96 +441,4 @@ class Extension(HookableMixin):
return "<Extension '%s'>" % self.name
-class Resource(object):
- """Base class for OpenStack resources (tenant, user, etc.).
-
- This is pretty much just a bag for attributes.
- """
-
- HUMAN_ID = False
- NAME_ATTR = 'name'
-
- def __init__(self, manager, info, loaded=False):
- """Populate and bind to a manager.
-
- :param manager: BaseManager object
- :param info: dictionary representing resource attributes
- :param loaded: prevent lazy-loading if set to True
- """
- self.manager = manager
- self._info = info
- self._add_details(info)
- self._loaded = loaded
-
- 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)
-
- @property
- def human_id(self):
- """Human-readable ID which can be used for bash completion.
- """
- if self.HUMAN_ID:
- name = getattr(self, self.NAME_ATTR, None)
- if name is not None:
- return strutils.to_slug(name)
- return None
-
- def _add_details(self, info):
- for (k, v) in six.iteritems(info):
- try:
- setattr(self, k, v)
- self._info[k] = v
- except AttributeError:
- # In this case we already defined the attribute on the class
- pass
-
- 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 get(self):
- """Support for lazy loading details.
-
- Some clients, such as novaclient have the option to lazy load the
- details, details which can be loaded with this function.
- """
- # 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)
- self._add_details(
- {'x_request_id': self.manager.client.last_request_id})
-
- def __eq__(self, other):
- if not isinstance(other, Resource):
- return NotImplemented
- # two resources of different types are not equal
- 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)
+Resource = _base.Resource