commit 11b2a71d3a6ae24365ebd1e9a30c323a6a3ce275 Author: Damian Johnson atagar@torproject.org Date: Thu Oct 27 09:17:26 2011 -0700
Caching for stem.process.get_version()
Caching results of the stem.process.get_version() function to avoid unnecessary lookups. --- stem/process.py | 48 +++++++++++++++++++++++++++--------------------- 1 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/stem/process.py b/stem/process.py index 0baa5dd..934a9c1 100644 --- a/stem/process.py +++ b/stem/process.py @@ -15,6 +15,9 @@ from stem.util import system # number of seconds before we time out our attempt to start a tor instance DEFAULT_INIT_TIMEOUT = 90
+# cache for the get_version function +VERSION_CACHE = {} + def get_version(tor_cmd = "tor"): """ Provides the version of tor. @@ -29,29 +32,32 @@ def get_version(tor_cmd = "tor"): IOError if unable to query or parse the version """
- try: - version_cmd = "%s --version" % tor_cmd - version_output = system.call(version_cmd) - except OSError, exc: - raise IOError(exc) - - if version_output: - # output example: - # Oct 21 07:19:27.438 [notice] Tor v0.2.1.30. This is experimental software. Do not rely on it for strong anonymity. (Running on Linux i686) - # Tor version 0.2.1.30. + if not tor_cmd in VERSION_CACHE: + try: + version_cmd = "%s --version" % tor_cmd + version_output = system.call(version_cmd) + except OSError, exc: + raise IOError(exc)
- last_line = version_output[-1] - - if last_line.startswith("Tor version ") and last_line.endswith("."): - try: - version_str = last_line[12:-1] - return stem.types.get_version(version_str) - except ValueError, exc: - raise IOError(exc) + if version_output: + # output example: + # Oct 21 07:19:27.438 [notice] Tor v0.2.1.30. This is experimental software. Do not rely on it for strong anonymity. (Running on Linux i686) + # Tor version 0.2.1.30. + + last_line = version_output[-1] + + if last_line.startswith("Tor version ") and last_line.endswith("."): + try: + version_str = last_line[12:-1] + VERSION_CACHE[tor_cmd] = stem.types.get_version(version_str) + except ValueError, exc: + raise IOError(exc) + else: + raise IOError("Unexpected response from '%s': %s" % (version_cmd, last_line)) else: - raise IOError("Unexpected response from '%s': %s" % (version_cmd, last_line)) - else: - raise IOError("'%s' didn't have any output" % version_cmd) + raise IOError("'%s' didn't have any output" % version_cmd) + + return VERSION_CACHE[tor_cmd]
def launch_tor(torrc_path, completion_percent = 100, init_msg_handler = None, timeout = DEFAULT_INIT_TIMEOUT): """
tor-commits@lists.torproject.org