From c67f2881a4bbe5958048610458180c3f9d914964 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 3 Dec 2012 23:51:18 -0500 Subject: Fix broken --version command The code for lazy loading of version string was broken. The way it breaks in glance and oslo is different. This patch is just for oslo. Here we end up overriding more methods in our lazy string class to make argparse happy and added test cases to make sure we don't break again. we also sure we cache the result of the lookup so we return the same version everytime and for performance. Added a few test cases as well. Fixes LP #1085984 Change-Id: I0635899c37fa8e5a7edf282907d2a5e04aa064cb --- openstack/common/version.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'openstack') diff --git a/openstack/common/version.py b/openstack/common/version.py index a19e422..dae88e3 100644 --- a/openstack/common/version.py +++ b/openstack/common/version.py @@ -24,17 +24,37 @@ import pkg_resources import setup -class _deferred_version_string(object): +class _deferred_version_string(str): """Internal helper class which provides delayed version calculation.""" - def __init__(self, version_info, prefix): - self.version_info = version_info - self.prefix = prefix + + def __new__(cls, version_info, prefix): + new_obj = str.__new__(cls, "") + new_obj._version_info = version_info + new_obj._prefix = prefix + new_obj._cached_version = None + return new_obj + + def _get_cached_version(self): + if not self._cached_version: + self._cached_version = \ + "%s%s" % (self._prefix, + self._version_info.version_string()) + return self._cached_version + + def __len__(self): + return self._get_cached_version().__len__() + + def __contains__(self, item): + return self._get_cached_version().__contains__(item) + + def __getslice__(self, i, j): + return self._get_cached_version().__getslice__(i, j) def __str__(self): - return "%s%s" % (self.prefix, self.version_info.version_string()) + return self._get_cached_version() def __repr__(self): - return "%s%s" % (self.prefix, self.version_info.version_string()) + return self._get_cached_version() class VersionInfo(object): -- cgit