[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