[Checkins] SVN: grokproject/trunk/ Factor out functions is_grok_installed and install_grok.

Maurits van Rees m.van.rees at zestsoftware.nl
Sat May 3 16:58:53 EDT 2008


Log message for revision 86295:
  Factor out functions is_grok_installed and install_grok.
  

Changed:
  U   grokproject/trunk/CHANGES.txt
  U   grokproject/trunk/grokproject/templates.py
  U   grokproject/trunk/grokproject/utils.py

-=-
Modified: grokproject/trunk/CHANGES.txt
===================================================================
--- grokproject/trunk/CHANGES.txt	2008-05-03 20:40:18 UTC (rev 86294)
+++ grokproject/trunk/CHANGES.txt	2008-05-03 20:58:52 UTC (rev 86295)
@@ -4,6 +4,8 @@
 0.8 (unreleased)
 ------------------
 
+* Factor out functions is_grok_installed and install_grok.
+
 * When grok is not installed yet, download a tar ball with all eggs
   needed by Grok and install those in the shared eggs directory.
 

Modified: grokproject/trunk/grokproject/templates.py
===================================================================
--- grokproject/trunk/grokproject/templates.py	2008-05-03 20:40:18 UTC (rev 86294)
+++ grokproject/trunk/grokproject/templates.py	2008-05-03 20:58:52 UTC (rev 86295)
@@ -15,8 +15,8 @@
 from grokproject.utils import create_buildout_default_file
 from grokproject.utils import exist_buildout_default_file
 from grokproject.utils import required_grok_version
-from zc.buildout.easy_install import install
-from zc.buildout.easy_install import MissingDistribution
+from grokproject.utils import is_grok_installed
+from grokproject.utils import install_grok
 
 GROK_RELEASE_URL = 'http://grok.zope.org/releaseinfo/'
 BOOTSTRAP = 'http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py'
@@ -105,49 +105,37 @@
             os.mkdir(eggs_dir)
 
         version = required_grok_version(vars['version_info_file_contents'])
-        try:
-            empty_index = tempfile.mkdtemp()
+        if not is_grok_installed(target_dir=eggs_dir, version=version):
+            print "Grok is missing.  We will download a tar ball."
 
-            # Check if the required grok version is already installed.
-            # We do this by trying to install grok in the eggs dir and
-            # letting easy_install only look inside that same eggs
-            # dir while doing that.
+            tarball_name = 'grok-eggs-%s.tgz' % version
+            url = GROK_RELEASE_URL + tarball_name
+            print "Attempting download from %s ..." % url
+
             try:
-                install(['grok'], eggs_dir, newest=False,
-                        versions={'grok': version}, links=[eggs_dir],
-                        index='file://' + empty_index)
-            except MissingDistribution:
-                print "Grok is missing!  We will download a tar ball."
+                extraction_dir = tempfile.mkdtemp() + '/'
+                filenum, temp_tarball_name = tempfile.mkstemp()
+                tarball = open(temp_tarball_name, 'w')
+                tarball.write(urllib.urlopen(url).read())
+                tarball.close()
+                print "Finished downloading."
+                print "Installing eggs to %s ..." % eggs_dir
 
-                tarball_name = 'grok-eggs-%s.tgz' % version
-                url = GROK_RELEASE_URL + tarball_name
-                print "Attempting download from %s ..." % url
+                tf = tarfile.open(temp_tarball_name,
+                                  'r:gz')
+                links = []
+                for name in tf.getnames():
+                    tf.extract(name, extraction_dir)
+                    links.append(extraction_dir + name)
+                tf.close()
 
-                try:
-                    extraction_dir = tempfile.mkdtemp() + '/'
-                    filenum, temp_tarball_name = tempfile.mkstemp()
-                    tarball = open(temp_tarball_name, 'w')
-                    tarball.write(urllib.urlopen(url).read())
-                    tarball.close()
-                    print "Finished downloading."
-                    print "Installing eggs to %s ..." % eggs_dir
+                result = install_grok(target_dir=eggs_dir, version=version,
+                                      links=links)
+                if result is False:
+                    print "Failed to install Grok with the tar ball."
+                    print "Continuing with buildout instead."
+            finally:
+                shutil.rmtree(extraction_dir)
+                os.unlink(temp_tarball_name)
 
-                    tf = tarfile.open(temp_tarball_name,
-                                      'r:gz')
-                    links = []
-                    for name in tf.getnames():
-                        tf.extract(name, extraction_dir)
-                        links.append(extraction_dir + name)
-                    tf.close()
-
-                    install(['grok'], eggs_dir, newest=False,
-                            versions={'grok': version},
-                            links=links,
-                            index='file://' + empty_index)
-                finally:
-                    shutil.rmtree(extraction_dir)
-                    os.unlink(temp_tarball_name)
-        finally:
-            shutil.rmtree(empty_index)
-
         run_buildout(command.options.verbose)

Modified: grokproject/trunk/grokproject/utils.py
===================================================================
--- grokproject/trunk/grokproject/utils.py	2008-05-03 20:40:18 UTC (rev 86294)
+++ grokproject/trunk/grokproject/utils.py	2008-05-03 20:58:52 UTC (rev 86295)
@@ -140,3 +140,31 @@
     for line in versionfile.split('\n'):
         if line.startswith('grok ='):
             return line.split(' ')[-1]
+
+def install_grok(target_dir=None, version=None, links=None):
+    from zc.buildout.easy_install import install
+    from zc.buildout.easy_install import MissingDistribution
+    try:
+        empty_index = tempfile.mkdtemp()
+
+        try:
+            install(['grok'], target_dir, newest=False,
+                    versions={'grok': version}, links=links,
+                    index='file://' + empty_index)
+        except MissingDistribution:
+            result = False
+        else:
+            result = True
+    finally:
+        shutil.rmtree(empty_index)
+    return result
+
+
+def is_grok_installed(target_dir=None, version=None):
+    # Check if the required grok version is installed.  We do this
+    # by trying to install grok in the target dir and letting
+    # easy_install only look inside that same eggs dir while doing
+    # that.
+    result = install_grok(target_dir=target_dir, version=version,
+                          links=[target_dir])
+    return result



More information about the Checkins mailing list