refactor the feature of getting versions of packages, include the version numbers...
authorZooko O'Whielacronx <zooko@zooko.com>
Thu, 13 Dec 2007 02:37:37 +0000 (19:37 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Thu, 13 Dec 2007 02:37:37 +0000 (19:37 -0700)
src/allmydata/__init__.py
src/allmydata/logpublisher.py
src/allmydata/node.py
src/allmydata/scripts/common.py
src/allmydata/webish.py

index 349c7e2e82e69dedf94ce41a109a2bb767deb7a1..793827ad557b00979a9437d780b228c3d8203a7d 100644 (file)
@@ -18,3 +18,29 @@ except ImportError:
 hush_pyflakes = __version__
 del hush_pyflakes
 
+def get_package_versions():
+    import OpenSSL, allmydata, foolscap, nevow, pycryptopp, setuptools, simplejson, twisted, zfec
+    return {
+        'pyopenssl': OpenSSL.__version__,
+        'allmydata': allmydata.__version__,
+        'foolscap': foolscap.__version__,
+        'nevow': nevow.__version__,
+        'pycryptopp': pycryptopp.__version__,
+        'setuptools': setuptools.__version__,
+        'simplejson': simplejson.__version__,
+        'twisted': twisted.__version__,
+        'zfec': zfec.__version__,
+        }
+
+def get_package_versions_string():
+    versions = get_package_versions()
+    res = []
+    for p in ["allmydata", "foolscap", "pycryptopp", "zfec", "twisted", "nevow"]:
+        if versions.has_key(p):
+            res.append(str(p) + ": " + str(versions[p]))
+            del versions[p]
+        else:
+            res.append(str(p) + ": UNKNOWN")
+    for p, v in versions.iteritems():
+        res.append(str(p) + ": " + str(v))
+    return ', '.join(res)
index 5de90641bf359872fd0372dfb5295c84a6b7f156..0718dcf79dfd0baee1136fa0b80403660f3e8d15 100644 (file)
@@ -5,6 +5,7 @@ from twisted.application import service
 from twisted.python import log
 from foolscap import Referenceable, RemoteInterface
 from foolscap.schema import DictOf, Any
+from allmydata import get_package_versions
 
 class RILogObserver(RemoteInterface):
     def msg(logmsg=DictOf(str, Any())):
@@ -67,12 +68,9 @@ class LogPublisher(Referenceable, service.MultiService):
         #f.close()
 
     def remote_get_versions(self):
-        versions = self.parent.get_versions()
-        # our __version__ attributes are actually instances of
-        # allmydata.util.version_class.Version, so convert them into strings
-        # first.
+        # Convert all the version instances to strings.
         return dict([(k,str(v))
-                     for k,v in versions.items()])
+                     for k,v in get_package_versions().iteritems()])
 
     def remote_subscribe_to_all(self, observer):
         s = Subscription()
index 8989eef5c13b8e964c3d74defe028c3bce5d9817..4c4ad3bc09a83349fda2c3c82034608c4a78cf9a 100644 (file)
@@ -7,14 +7,12 @@ from twisted.python import log
 from twisted.application import service
 from twisted.internet import defer, reactor
 from foolscap import Tub, eventual
+from allmydata import get_package_versions_string
 from allmydata.util import log as tahoe_log
 from allmydata.util import iputil, observer, humanreadable
 from allmydata.util.assertutil import precondition
 from allmydata.logpublisher import LogPublisher
 
-# Just to get their versions:
-import allmydata, foolscap, pycryptopp, zfec
-
 # group 1 will be addr (dotted quad string), group 3 if any will be portnum (string)
 ADDR_RE=re.compile("^([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*)(:([1-9][0-9]*))?$")
 
@@ -72,10 +70,7 @@ class Node(service.MultiService):
                 self.log("AuthorizedKeysManhole listening on %d" % portnum)
 
         self.setup_logging()
-        self.log("Node constructed.  tahoe version: %s, foolscap: %s,"
-                 " twisted: %s, zfec: %s"
-                 % (allmydata.__version__, foolscap.__version__,
-                    twisted.__version__, zfec.__version__,))
+        self.log("Node constructed. " + get_package_versions_string())
         iputil.increase_rlimits()
 
     def get_config(self, name, mode="r", required=False):
@@ -128,14 +123,6 @@ class Node(service.MultiService):
             self.log("Unable to write config file '%s'" % fn)
             self.log(e)
 
-    def get_versions(self):
-        return {'allmydata': allmydata.__version__,
-                'foolscap': foolscap.__version__,
-                'twisted': twisted.__version__,
-                'zfec': zfec.__version__,
-                'pycryptopp': pycryptopp.__version__,
-                }
-
     def startService(self):
         # Note: this class can be started and stopped at most once.
         self.log("Node.startService")
index b29d2b83ea1c1d8652dd547552e0bcaf04143fce..dd15fda8d5cbedca6fe02d84fbf125af8519a24e 100644 (file)
@@ -10,13 +10,8 @@ class BaseOptions:
         ]
 
     def opt_version(self):
-        from twisted import copyright
-        import allmydata, zfec, foolscap, pycryptopp
-        print "Twisted version:", copyright.version
-        print "Foolscap version:", foolscap.__version__
-        print "zfec version:", zfec.__version__
-        print "allmydata version:", allmydata.__version__
-        print "pycryptopp version:", pycryptopp.__version__
+        import allmydata
+        print allmydata.get_package_versions_string()
         sys.exit(0)
 
 
index 2db720d88c63097f0e6b597dc1d67f726e9fee66..88a6c26600ba9d4da51656b301ab8afc343bce49 100644 (file)
@@ -14,6 +14,7 @@ from allmydata.interfaces import IDownloadTarget, IDirectoryNode, IFileNode, \
      IMutableFileNode
 from allmydata import upload, download
 from allmydata import provisioning
+from allmydata import get_package_versions_string
 from zope.interface import implements, Interface
 import urllib
 from formless import webform
@@ -1303,9 +1304,7 @@ class Root(rend.Page):
     child_provisioning = provisioning.ProvisioningTool()
 
     def data_version(self, ctx, data):
-        v = IClient(ctx).get_versions()
-        return "tahoe: %s, zfec: %s, foolscap: %s, twisted: %s" % \
-               (v['allmydata'], v['zfec'], v['foolscap'], v['twisted'])
+        return get_package_versions_string()
 
     def data_my_nodeid(self, ctx, data):
         return b32encode(IClient(ctx).nodeid).lower()