[Checkins] SVN: grokproject/branches/lra-alternate-release-url/ Fix tests when running on path with spaces on it; Allows use of a different grok-release-url, including 'file:///...' URLs
Leonardo Rochael Almeida
leorochael at gmail.com
Mon Sep 21 11:18:11 EDT 2009
Log message for revision 104397:
Fix tests when running on path with spaces on it; Allows use of a different grok-release-url, including 'file:///...' URLs
Changed:
_U grokproject/branches/lra-alternate-release-url/
U grokproject/branches/lra-alternate-release-url/buildout.cfg
U grokproject/branches/lra-alternate-release-url/grokproject/template_paste/buildout.cfg_tmpl
U grokproject/branches/lra-alternate-release-url/grokproject/template_zopectl/buildout.cfg_tmpl
U grokproject/branches/lra-alternate-release-url/grokproject/templates.py
U grokproject/branches/lra-alternate-release-url/grokproject/utils.py
U grokproject/branches/lra-alternate-release-url/setup.py
U grokproject/branches/lra-alternate-release-url/tests.py
A grokproject/branches/lra-alternate-release-url/tests_alternative_release_url.txt
U grokproject/branches/lra-alternate-release-url/tests_paste.txt
U grokproject/branches/lra-alternate-release-url/tests_zopectl.txt
-=-
Property changes on: grokproject/branches/lra-alternate-release-url
___________________________________________________________________
Modified: svn:ignore
- *.egg
build
bin
dist
eggs
develop-eggs
parts
.installed.cfg
grokproject.egg-info
*.pyc
*.pyo
shorttests
+ *.egg
build
bin
dist
eggs
develop-eggs
parts
.*
grokproject.egg-info
*.pyc
*.pyo
shorttests
Modified: grokproject/branches/lra-alternate-release-url/buildout.cfg
===================================================================
--- grokproject/branches/lra-alternate-release-url/buildout.cfg 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/buildout.cfg 2009-09-21 15:18:10 UTC (rev 104397)
@@ -10,5 +10,5 @@
[test]
recipe = zc.recipe.testrunner
-eggs = grokproject
+eggs = grokproject[tests]
defaults = ['--tests-pattern', '^f?tests$$', '-v']
Modified: grokproject/branches/lra-alternate-release-url/grokproject/template_paste/buildout.cfg_tmpl
===================================================================
--- grokproject/branches/lra-alternate-release-url/grokproject/template_paste/buildout.cfg_tmpl 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/grokproject/template_paste/buildout.cfg_tmpl 2009-09-21 15:18:10 UTC (rev 104397)
@@ -106,4 +106,4 @@
[eggbasket]
recipe = z3c.recipe.eggbasket
eggs = grok
-url = http://grok.zope.org/releaseinfo/grok-eggs-${grokversion}.tgz
+url = ${grok_release_url}grok-eggs-${grokversion}.tgz
Modified: grokproject/branches/lra-alternate-release-url/grokproject/template_zopectl/buildout.cfg_tmpl
===================================================================
--- grokproject/branches/lra-alternate-release-url/grokproject/template_zopectl/buildout.cfg_tmpl 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/grokproject/template_zopectl/buildout.cfg_tmpl 2009-09-21 15:18:10 UTC (rev 104397)
@@ -80,4 +80,4 @@
[eggbasket]
recipe = z3c.recipe.eggbasket
eggs = grok
-url = http://grok.zope.org/releaseinfo/grok-eggs-${grokversion}.tgz
+url = ${grok_release_url}grok-eggs-${grokversion}.tgz
Modified: grokproject/branches/lra-alternate-release-url/grokproject/templates.py
===================================================================
--- grokproject/branches/lra-alternate-release-url/grokproject/templates.py 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/grokproject/templates.py 2009-09-21 15:18:10 UTC (rev 104397)
@@ -14,7 +14,7 @@
from grokproject.utils import required_grok_version
from grokproject.utils import extend_versions_cfg
-GROK_RELEASE_URL = 'http://grok.zope.org/releaseinfo/'
+GROK_RELEASE_URL_DEFAULT = 'http://grok.zope.org/releaseinfo/'
class GrokProject(templates.Template):
@@ -37,6 +37,10 @@
ask_var('eggs_dir',
'Location where zc.buildout will look for and place packages',
default='', should_ask=False),
+ ask_var('grok_release_url',
+ "URL where grokproject will look up grok version and "
+ "release information.",
+ should_ask=False),
]
def check_vars(self, vars, cmd):
@@ -48,6 +52,10 @@
sys.exit(1)
explicit_eggs_dir = vars.get('eggs_dir')
+ grok_release_url = vars.get('grok_release_url',
+ GROK_RELEASE_URL_DEFAULT)
+ if not grok_release_url.endswith('/'):
+ grok_release_url += '/'
skipped_vars = {}
for var in list(self.vars):
@@ -59,6 +67,8 @@
for name in skipped_vars:
vars[name] = skipped_vars[name]
+ vars['grok_release_url'] = grok_release_url
+
vars['passwd'] = get_sha1_encoded_string(vars['passwd'])
for var_name in ['user', 'passwd']:
# Escape values that go in site.zcml.
@@ -78,10 +88,10 @@
if version == 'current':
# if no version was specified, we look up the current
# version first
- current_info_url = GROK_RELEASE_URL + 'current'
+ current_info_url = urlparse.urljoin(grok_release_url, 'current')
cfg_filename = self.download(current_info_url).strip()
- version_info_url = urlparse.urljoin(GROK_RELEASE_URL, cfg_filename)
+ version_info_url = urlparse.urljoin(grok_release_url, cfg_filename)
vars['version_info_url'] = version_info_url
vars['version_info_file_contents'] = self.download(version_info_url)
Modified: grokproject/branches/lra-alternate-release-url/grokproject/utils.py
===================================================================
--- grokproject/branches/lra-alternate-release-url/grokproject/utils.py 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/grokproject/utils.py 2009-09-21 15:18:10 UTC (rev 104397)
@@ -174,7 +174,7 @@
"""Add additional package versions for versions.cfg.
We only add eggs that are not already included in versions.cfg
- fetched from grok.zope.org/releaseinfo.
+ fetched from the release info URL (usually grok.zope.org/releaseinfo).
"""
here = os.path.dirname(__file__)
if for_zopectl:
Modified: grokproject/branches/lra-alternate-release-url/setup.py
===================================================================
--- grokproject/branches/lra-alternate-release-url/setup.py 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/setup.py 2009-09-21 15:18:10 UTC (rev 104397)
@@ -21,7 +21,7 @@
include_package_data=True,
zip_safe=False,
install_requires=['PasteScript>=1.6'],
- tests_require=['zope.testing', 'Cheetah', 'PasteScript'],
+ extras_require=dict(tests=['zope.testing',]),
test_suite='tests.test_suite',
entry_points={
'console_scripts': ['grokproject = grokproject:main'],
Modified: grokproject/branches/lra-alternate-release-url/tests.py
===================================================================
--- grokproject/branches/lra-alternate-release-url/tests.py 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/tests.py 2009-09-21 15:18:10 UTC (rev 104397)
@@ -12,8 +12,9 @@
import sys
import os
import shutil
-import popen2
import StringIO
+import subprocess
+import tempfile
from zope.testing import doctest
@@ -24,22 +25,21 @@
if os.path.isdir(dirname):
shutil.rmtree(dirname)
-def read_sh(cmd):
- _cmd = cmd
- old = sys.stdout
- child_stdout_and_stderr, child_stdin = popen2.popen4(_cmd)
- child_stdin.close()
- return child_stdout_and_stderr.read()
+## FIXME - check for other platforms
+MUST_CLOSE_FDS = not sys.platform.startswith('win')
+def read_sh(command, input=None):
+ p = subprocess.Popen(command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ close_fds=MUST_CLOSE_FDS)
+ out, err_ = p.communicate(input)
+ return out
+
def sh(cmd):
- _cmd = cmd
print cmd
- # launch command 2 times to see what append and be able
- # to test in doc tests
- os.system(_cmd)
- child_stdout_and_stderr, child_stdin = popen2.popen4(_cmd)
- child_stdin.close()
- print child_stdout_and_stderr.read()
+ print read_sh(cmd)
def ls(*args):
dirname = os.path.join(*args)
@@ -123,6 +123,12 @@
execdir = os.path.abspath(os.path.dirname(sys.executable))
tempdir = os.getenv('TEMP','/tmp')
+DOCTEST_FILES='''
+tests_zopectl.txt
+tests_paste.txt
+tests_alternative_release_url.txt
+'''.strip().split('\n')
+
def doc_suite(package_dir, setUp=None, tearDown=None, globs=None):
"""Returns a test suite, based on doctests found in /doctest."""
suite = []
@@ -135,9 +141,8 @@
if package_dir not in sys.path:
sys.path.append(package_dir)
- docs = [os.path.join(package_dir, 'tests_zopectl.txt'),
- os.path.join(package_dir, 'tests_paste.txt'),
- ]
+ docs = [os.path.join(package_dir, filename)
+ for filename in DOCTEST_FILES]
for test in docs:
suite.append(doctest.DocFileSuite(test, optionflags=flags,
Added: grokproject/branches/lra-alternate-release-url/tests_alternative_release_url.txt
===================================================================
--- grokproject/branches/lra-alternate-release-url/tests_alternative_release_url.txt (rev 0)
+++ grokproject/branches/lra-alternate-release-url/tests_alternative_release_url.txt 2009-09-21 15:18:10 UTC (rev 104397)
@@ -0,0 +1,146 @@
+Grokproject with alternative release URL
+========================================
+
+Providing an alternative release URL for grokproject is useful if you need to
+have your own local mirror for grok.
+
+In this test we will use an alternative release URL for grokproject. It is a
+"file:///" URL pointing to a directory with a fake set of grok release
+information files:
+
+ >>> testdir = tempfile.mkdtemp() # can be removed when tempdir becomes really temporary
+ >>> fake_release = os.path.join(testdir, 'fake_release')
+ >>> os.mkdir(fake_release)
+ >>> touch(fake_release, 'current', data='grok-0.555.cfg')
+ >>> touch(fake_release, 'grok-0.555.cfg',
+ ... data='[versions]\ngrok = 0.555\n')
+ >>> ls(fake_release)
+ current
+ grok-0.555.cfg
+ >>> cat(fake_release, 'current')
+ grok-0.555.cfg
+ >>> cat(fake_release, 'grok-0.555.cfg')
+ [versions]
+ grok = 0.555
+ <BLANKLINE>
+ >>> alt_url = 'file://' + os.path.join(fake_release, '')
+
+Let's use paster, with a "file:///" url pointing to the fake grok release. We
+won't run buildout because the version file is not actually valid::
+
+ >>> paster = current_dir + '/bin/paster'
+ >>> paster_params = ('create -t grok --no-interactive -o'.split() +
+ ... [testdir])
+ >>> grok_params = ('grokexample user=a passwd=a run_buildout=false '
+ ... 'grok_release_url=' + alt_url).split()
+ >>> sh([paster] + paster_params + grok_params)
+ ['/.../bin/paster', 'create', '-t', 'grok', '--no-interactive',
+ '-o', ... 'grokexample', 'user=a', 'passwd=a', 'run_buildout=false',
+ 'grok_release_url=file:///.../fake_release/']
+ ...
+
+Let's check the contents::
+
+ >>> package_dir = os.path.join(testdir, 'grokexample')
+ >>> ls(package_dir)
+ bootstrap.py
+ buildout.cfg
+ etc
+ setup.py
+ src
+ versions.cfg
+
+ >>> software_dir = os.path.join(package_dir, 'src', 'grokexample')
+ >>> ls(software_dir)
+ __init__.py
+ app.py
+ app.txt
+ app_templates
+ configure.zcml
+ ftesting.zcml
+ static
+ tests.py
+
+Let's see if the information in our fake release URL was correctly propagated.
+
+ >>> cat(package_dir, 'versions.cfg')
+ # This file contains a list of versions of the various grok modules that
+ # belong together.
+ # It was downloaded from file://.../fake_release/grok-0.555.cfg
+ # when this project was created.
+ <BLANKLINE>
+ [versions]
+ grok = 0.555
+ <BLANKLINE>
+ ...
+
+ >>> cat(package_dir, 'buildout.cfg')
+ [buildout]
+ ...
+ [eggbasket]
+ recipe = z3c.recipe.eggbasket
+ eggs = grok
+ url = file:///.../grok-eggs-0.555.tgz...
+
+Cleanup:
+
+ >>> rmdir(package_dir)
+
+The "zopectl" version of the template should behave similarly:
+
+ >>> paster = current_dir + '/bin/paster'
+ >>> paster_params = ('create -t grok --no-interactive -o'.split() +
+ ... [testdir])
+ >>> grok_params = ('grokexample user=a passwd=a run_buildout=false '
+ ... 'zopectl=True grok_release_url=' + alt_url).split()
+ >>> sh([paster] + paster_params + grok_params)
+ ['/.../bin/paster', 'create', '-t', 'grok', '--no-interactive',
+ '-o', ... 'grokexample', 'user=a', 'passwd=a', 'run_buildout=false',
+ 'zopectl=True', 'grok_release_url=.../fake_release/']
+ ...
+
+Let's check the contents::
+
+ >>> package_dir = os.path.join(testdir, 'grokexample')
+ >>> ls(package_dir)
+ bootstrap.py
+ buildout.cfg
+ setup.py
+ src
+ versions.cfg
+
+ >>> software_dir = os.path.join(package_dir, 'src', 'grokexample')
+ >>> ls(software_dir)
+ __init__.py
+ app.py
+ app.txt
+ app_templates
+ configure.zcml
+ ftesting.zcml
+ static
+ tests.py
+
+Let's see if the information in our fake release URL was correctly propagated.
+
+ >>> cat(package_dir, 'versions.cfg')
+ # This file contains a list of versions of the various grok modules that
+ # belong together.
+ # It was downloaded from file://.../fake_release/grok-0.555.cfg
+ # when this project was created.
+ <BLANKLINE>
+ [versions]
+ grok = 0.555
+ <BLANKLINE>
+ ...
+
+ >>> cat(package_dir, 'buildout.cfg')
+ [buildout]
+ ...
+ [eggbasket]
+ recipe = z3c.recipe.eggbasket
+ eggs = grok
+ url = file:///.../grok-eggs-0.555.tgz...
+
+Cleanup (remove this after tempdir is really fixed):
+
+ >>> rmdir(testdir)
Property changes on: grokproject/branches/lra-alternate-release-url/tests_alternative_release_url.txt
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: grokproject/branches/lra-alternate-release-url/tests_paste.txt
===================================================================
--- grokproject/branches/lra-alternate-release-url/tests_paste.txt 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/tests_paste.txt 2009-09-21 15:18:10 UTC (rev 104397)
@@ -20,10 +20,12 @@
Then use paster. Eggs are placed in our freshly created eggs directory::
- >>> paster = current_dir + '/bin/paster create -t grok '
- >>> sh(paster + 'GrokExample user=a passwd=a '
- ... 'grokversion=0.14.1 eggs_dir=%s --no-interactive' % eggsdir)
- /.../bin/paster create -t grok GrokExample user=a passwd=a ...
+ >>> paster = current_dir + '/bin/paster'
+ >>> parms = 'create -t grok GrokExample user=a passwd=a grokversion=0.14.1'
+ >>> sh([paster] + parms.split() +
+ ... ['eggs_dir=%s' % eggsdir, '--no-interactive'])
+ ['/.../bin/paster', 'create', '-t', 'grok', 'GrokExample',
+ 'user=a', 'passwd=a', ...
...
Let's check the contents::
@@ -237,21 +239,22 @@
>>> cd(package_dir)
>>> cmd = os.path.join(bin_dir, 'buildout')
>>> output = read_sh(cmd)
- >>> print output
+ >>> print output # doctest: +REPORT_UDIFF
Develop: ...
Updating eggbasket.
Updating app.
Updating i18n.
i18n: setting up i18n tools
Updating test.
- Updating data.
- Updating log.
+ Updating site_zcml.
+ Updating zope_conf.
+ Updating mkdirs.
Updating zpasswd.
- Updating zope_conf.
- Updating site_zcml.
Updating zdaemon_conf.
Updating deploy_ini.
Updating debug_ini.
+ Updating data.
+ Updating log.
<BLANKLINE>
Using the generated `bootstrap` script
@@ -263,8 +266,7 @@
>>> import sys
>>> cmd_arg = os.path.join(package_dir, 'bootstrap.py')
- >>> cmd = "%s %s" % (sys.executable, cmd_arg)
- >>> output = read_sh(cmd)
+ >>> output = read_sh([sys.executable, cmd_arg])
>>> print output
Develop: '...'
Installing 'z3c.recipe.eggbasket'.
Modified: grokproject/branches/lra-alternate-release-url/tests_zopectl.txt
===================================================================
--- grokproject/branches/lra-alternate-release-url/tests_zopectl.txt 2009-09-21 15:13:06 UTC (rev 104396)
+++ grokproject/branches/lra-alternate-release-url/tests_zopectl.txt 2009-09-21 15:18:10 UTC (rev 104397)
@@ -20,10 +20,13 @@
Then use paster. Eggs are placed in our freshly created eggs directory::
- >>> paster = current_dir + '/bin/paster create -t grok '
- >>> sh(paster + 'grokexample user=a passwd=a zopectl=True '
- ... 'eggs_dir=%s --no-interactive' % eggsdir)
- /.../bin/paster create -t grok grokexample user=a passwd=a zopectl=True ...
+ >>> paster = current_dir + '/bin/paster'
+ >>> pasterparams = ('create -t grok grokexample user=a passwd=a '
+ ... 'zopectl=True')
+ >>> sh([paster] + pasterparams.split() +
+ ... ['eggs_dir=%s' % eggsdir, '--no-interactive'])
+ ['/.../bin/paster', 'create', '-t', 'grok', 'grokexample',
+ 'user=a', 'passwd=a', 'zopectl=True', ...
...
Let's check the contents::
@@ -218,8 +221,7 @@
>>> import sys
>>> cmd_arg = os.path.join(package_dir, 'bootstrap.py')
- >>> cmd = "%s %s" % (sys.executable, cmd_arg)
- >>> output = read_sh(cmd)
+ >>> output = read_sh([sys.executable, cmd_arg])
>>> print output
Develop: '...'
Installing 'z3c.recipe.eggbasket'.
More information about the checkins
mailing list