summaryrefslogtreecommitdiffstats
path: root/openstack
diff options
context:
space:
mode:
authorDavanum Srinivas <davanum@gmail.com>2012-12-03 23:51:18 -0500
committerDavanum Srinivas <davanum@gmail.com>2012-12-04 10:37:33 -0500
commitc67f2881a4bbe5958048610458180c3f9d914964 (patch)
tree16fe1d73cc9bd43152aa182ebc3203b0fa59bffb /openstack
parent45e6afcbf51f07a381b17fbe30a87776ee84ad59 (diff)
downloadoslo-c67f2881a4bbe5958048610458180c3f9d914964.tar.gz
oslo-c67f2881a4bbe5958048610458180c3f9d914964.tar.xz
oslo-c67f2881a4bbe5958048610458180c3f9d914964.zip
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
Diffstat (limited to 'openstack')
-rw-r--r--openstack/common/version.py32
1 files changed, 26 insertions, 6 deletions
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):