Updated infra to use Plone 4.3 and fixed UnicodeDecodeError

This commit is contained in:
Vincent Fretin 2013-06-01 16:06:50 +02:00
parent c02c3fc2f2
commit cf8b45425f
11 changed files with 47 additions and 109 deletions

View File

@ -4,7 +4,7 @@ python:
install: install:
- mkdir -p buildout-cache/{eggs,downloads} - mkdir -p buildout-cache/{eggs,downloads}
- python bootstrap.py -c travis.cfg -d - python bootstrap.py -c travis.cfg -d
- bin/buildout -Nc travis.cfg - bin/buildout -c travis.cfg -N -q -t 3
script: script:
- bin/test - bin/test
notifications: notifications:

View File

@ -1,29 +1,11 @@
[buildout] [buildout]
plone-version = 4.2.5
package-name = collective.contact.core package-name = collective.contact.core
package-extras = [test] package-extras = [test]
extends = extends =
https://raw.github.com/collective/buildout.plonetest/master/plone-4.2.x.cfg https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg
checkouts.cfg
sources.cfg sources.cfg
checkouts.cfg
versions.cfg versions.cfg
extensions = extensions =
mr.developer mr.developer
show-picked-versions = true
develop = .
parts +=
test
eggs +=
Pillow
ipdb
[test]
recipe = zc.recipe.testrunner
eggs =
${buildout:eggs}
${buildout:package-name} ${buildout:package-extras}
defaults = ['-s', '${buildout:package-name}', '--auto-color', '--auto-progress']

View File

@ -18,13 +18,13 @@ The script accepts buildout command-line options, so you can
use the -c option to specify an alternate configuration file. use the -c option to specify an alternate configuration file.
""" """
import os, shutil, sys, tempfile, textwrap, urllib, urllib2, subprocess import os, shutil, sys, tempfile, urllib, urllib2, subprocess
from optparse import OptionParser from optparse import OptionParser
if sys.platform == 'win32': if sys.platform == 'win32':
def quote(c): def quote(c):
if ' ' in c: if ' ' in c:
return '"%s"' % c # work around spawn lamosity on windows return '"%s"' % c # work around spawn lamosity on windows
else: else:
return c return c
else: else:
@ -57,13 +57,13 @@ if not has_broken_dash_S and 'site' in sys.modules:
# out any namespace packages from site-packages that might have been # out any namespace packages from site-packages that might have been
# loaded by .pth files. # loaded by .pth files.
clean_path = sys.path[:] clean_path = sys.path[:]
import site import site # imported because of its side effects
sys.path[:] = clean_path sys.path[:] = clean_path
for k, v in sys.modules.items(): for k, v in sys.modules.items():
if k in ('setuptools', 'pkg_resources') or ( if k in ('setuptools', 'pkg_resources') or (
hasattr(v, '__path__') and hasattr(v, '__path__') and
len(v.__path__)==1 and len(v.__path__) == 1 and
not os.path.exists(os.path.join(v.__path__[0],'__init__.py'))): not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))):
# This is a namespace package. Remove it. # This is a namespace package. Remove it.
sys.modules.pop(k) sys.modules.pop(k)
@ -72,10 +72,11 @@ is_jython = sys.platform.startswith('java')
setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py' setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
distribute_source = 'http://python-distribute.org/distribute_setup.py' distribute_source = 'http://python-distribute.org/distribute_setup.py'
# parsing arguments # parsing arguments
def normalize_to_url(option, opt_str, value, parser): def normalize_to_url(option, opt_str, value, parser):
if value: if value:
if '://' not in value: # It doesn't smell like a URL. if '://' not in value: # It doesn't smell like a URL.
value = 'file://%s' % ( value = 'file://%s' % (
urllib.pathname2url( urllib.pathname2url(
os.path.abspath(os.path.expanduser(value))),) os.path.abspath(os.path.expanduser(value))),)
@ -110,7 +111,7 @@ parser.add_option("--setup-source", action="callback", dest="setup_source",
help=("Specify a URL or file location for the setup file. " help=("Specify a URL or file location for the setup file. "
"If you use Setuptools, this will default to " + "If you use Setuptools, this will default to " +
setuptools_source + "; if you use Distribute, this " setuptools_source + "; if you use Distribute, this "
"will default to " + distribute_source +".")) "will default to " + distribute_source + "."))
parser.add_option("--download-base", action="callback", dest="download_base", parser.add_option("--download-base", action="callback", dest="download_base",
callback=normalize_to_url, nargs=1, type="string", callback=normalize_to_url, nargs=1, type="string",
help=("Specify a URL or directory for downloading " help=("Specify a URL or directory for downloading "
@ -156,7 +157,7 @@ args.append('bootstrap')
try: try:
import pkg_resources import pkg_resources
import setuptools # A flag. Sometimes pkg_resources is installed alone. import setuptools # A flag. Sometimes pkg_resources is installed alone.
if not hasattr(pkg_resources, '_distribute'): if not hasattr(pkg_resources, '_distribute'):
raise ImportError raise ImportError
except ImportError: except ImportError:
@ -211,6 +212,7 @@ if version is None and not options.accept_buildout_test_releases:
# Figure out the most recent final version of zc.buildout. # Figure out the most recent final version of zc.buildout.
import setuptools.package_index import setuptools.package_index
_final_parts = '*final-', '*final' _final_parts = '*final-', '*final'
def _final_version(parsed_version): def _final_version(parsed_version):
for part in parsed_version: for part in parsed_version:
if (part[:1] == '*') and (part not in _final_parts): if (part[:1] == '*') and (part not in _final_parts):
@ -242,7 +244,7 @@ cmd.append(requirement)
if is_jython: if is_jython:
import subprocess import subprocess
exitcode = subprocess.Popen(cmd, env=env).wait() exitcode = subprocess.Popen(cmd, env=env).wait()
else: # Windows prefers this, apparently; otherwise we would prefer subprocess else: # Windows prefers this, apparently; otherwise we would prefer subprocess
exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env])) exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
if exitcode != 0: if exitcode != 0:
sys.stdout.flush() sys.stdout.flush()
@ -256,5 +258,5 @@ ws.add_entry(eggs_dir)
ws.require(requirement) ws.require(requirement)
import zc.buildout.buildout import zc.buildout.buildout
zc.buildout.buildout.main(args) zc.buildout.buildout.main(args)
if not options.eggs: # clean up temporary egg directory if not options.eggs: # clean up temporary egg directory
shutil.rmtree(eggs_dir) shutil.rmtree(eggs_dir)

View File

@ -1,11 +1,10 @@
[buildout] [buildout]
extends = extends =
base.cfg base.cfg
parts += parts +=
omelette omelette
eggs +=
show-picked-versions = true ipdb
[omelette] [omelette]
recipe = collective.recipe.omelette recipe = collective.recipe.omelette

View File

@ -1,12 +1,7 @@
[buildout] [buildout]
extends = extends =
https://raw.github.com/plone/buildout.coredev/4.2/sources.cfg https://raw.github.com/plone/buildout.coredev/4.3/sources.cfg
https://raw.github.com/plone/buildout.dexterity/master/sources.cfg
always-checkout = force always-checkout = force
auto-checkout += auto-checkout +=
plone.app.dexterity
plone.dexterity
plone.formwidget.masterselect plone.formwidget.masterselect
collective.contact.widget collective.contact.widget
z3c.form
plone.app.z3cform

View File

@ -1,10 +1,7 @@
[buildout]
extends = https://raw.github.com/plone/buildout.coredev/4.3/sources.cfg
[remotes] [remotes]
collective = git://github.com/collective
collective_push = git@github.com:collective
zopefoundation = git://github.com/zopefoundation
zopefoundation_push = git@github.com:zopefoundation
plone = git://github.com/plone
plone_push = git@github.com:plone
tdesvenain = git://github.com/tdesvenain tdesvenain = git://github.com/tdesvenain
tdesvenain_push = git@github.com:tdesvenain tdesvenain_push = git@github.com:tdesvenain
vincentfretin = git://github.com/vincentfretin vincentfretin = git://github.com/vincentfretin
@ -15,9 +12,6 @@ entrouvert = git://repos.entrouvert.org
entrouvert_push = git+ssh://git@repos.entrouvert.org entrouvert_push = git+ssh://git@repos.entrouvert.org
[sources] [sources]
plone.act = git ${remotes:plone}/plone.act.git pushurl=${remotes:plone_push}/plone.act.git
plone.app.z3cform = git ${remotes:plone}/plone.app.z3cform.git pushurl=${remotes:plone_push}/plone.app.z3cform.git
collective.contact.core = git ${remotes:collective}/collective.contact.core.git pushurl=${remotes:collective_push}/collective.contact.core.git collective.contact.core = git ${remotes:collective}/collective.contact.core.git pushurl=${remotes:collective_push}/collective.contact.core.git
collective.contact.widget = git ${remotes:collective}/collective.contact.widget.git pushurl=${remotes:collective_push}/collective.contact.widget.git collective.contact.widget = git ${remotes:collective}/collective.contact.widget.git pushurl=${remotes:collective_push}/collective.contact.widget.git
plone.formwidget.masterselect = git ${remotes:collective}/plone.formwidget.masterselect.git pushurl=${remotes:collective_push}/plone.formwidget.masterselect.git plone.formwidget.masterselect = git ${remotes:collective}/plone.formwidget.masterselect.git pushurl=${remotes:collective_push}/plone.formwidget.masterselect.git
z3c.form = git ${remotes:zopefoundation}/z3c.form pushurl=${remotes:zopefoundation_push}/z3c.form

View File

@ -100,9 +100,9 @@ class Organization(Container):
e.g. for HR service in Division Bar in Organization Foo : e.g. for HR service in Division Bar in Organization Foo :
[u"Organization Foo", u"Division Bar", u"HR service"] [u"Organization Foo", u"Division Bar", u"HR service"]
""" """
return [item.Title() for item in self.get_organizations_chain(first_index=first_index)] return [item.title for item in self.get_organizations_chain(first_index=first_index)]
def get_full_title(self, separator=' / ', first_index=0): def get_full_title(self, separator=u' / ', first_index=0):
"""Returns the full title of the organization """Returns the full title of the organization
It is constituted by the list of the names of the organizations and It is constituted by the list of the names of the organizations and
sub-organizations in this organization separated by slashes sub-organizations in this organization separated by slashes

View File

@ -6,7 +6,7 @@ from collective.contact.core.content.organization import IOrganization
@indexer(IOrganization) @indexer(IOrganization)
def organization_searchable_text(obj): def organization_searchable_text(obj):
return ' '.join(obj.get_organizations_titles()) return u' '.join(obj.get_organizations_titles())
@indexer(IHeldPosition) @indexer(IHeldPosition)
@ -18,4 +18,4 @@ def held_position_searchable_text(obj):
indexed_fields.append(position.title) indexed_fields.append(position.title)
organization = obj.get_organization() organization = obj.get_organization()
indexed_fields.extend(organization.get_organizations_titles()) indexed_fields.extend(organization.get_organizations_titles())
return ' '.join(indexed_fields) return u' '.join(indexed_fields)

View File

@ -108,39 +108,39 @@ class TestOrganization(TestContentTypes):
def test_get_organizations_titles(self): def test_get_organizations_titles(self):
corpsa_titles = self.corpsa.get_organizations_titles() corpsa_titles = self.corpsa.get_organizations_titles()
self.assertIn('Armée de terre', corpsa_titles) self.assertIn(u'Armée de terre', corpsa_titles)
self.assertIn('Corps A', corpsa_titles) self.assertIn(u'Corps A', corpsa_titles)
self.assertEquals(len(corpsa_titles), 2) self.assertEquals(len(corpsa_titles), 2)
division_alpha_titles = self.divisionalpha.get_organizations_titles() division_alpha_titles = self.divisionalpha.get_organizations_titles()
self.assertIn('Armée de terre', division_alpha_titles) self.assertIn(u'Armée de terre', division_alpha_titles)
self.assertIn('Corps A', division_alpha_titles) self.assertIn(u'Corps A', division_alpha_titles)
self.assertIn('Division Alpha', division_alpha_titles) self.assertIn(u'Division Alpha', division_alpha_titles)
self.assertEquals(len(division_alpha_titles), 3) self.assertEquals(len(division_alpha_titles), 3)
brigadelh_titles = self.brigadelh.get_organizations_titles() brigadelh_titles = self.brigadelh.get_organizations_titles()
self.assertIn('Armée de terre', brigadelh_titles) self.assertIn(u'Armée de terre', brigadelh_titles)
self.assertIn('Corps A', brigadelh_titles) self.assertIn(u'Corps A', brigadelh_titles)
self.assertIn('Division Alpha', brigadelh_titles) self.assertIn(u'Division Alpha', brigadelh_titles)
self.assertIn('Régiment H', brigadelh_titles) self.assertIn(u'Régiment H', brigadelh_titles)
self.assertIn('Brigade LH', brigadelh_titles) self.assertIn(u'Brigade LH', brigadelh_titles)
self.assertEquals(len(brigadelh_titles), 5) self.assertEquals(len(brigadelh_titles), 5)
brigadelh_titles = self.brigadelh.get_organizations_titles(first_index=2) brigadelh_titles = self.brigadelh.get_organizations_titles(first_index=2)
self.assertIn('Division Alpha', brigadelh_titles) self.assertIn(u'Division Alpha', brigadelh_titles)
self.assertIn('Régiment H', brigadelh_titles) self.assertIn(u'Régiment H', brigadelh_titles)
self.assertIn('Brigade LH', brigadelh_titles) self.assertIn(u'Brigade LH', brigadelh_titles)
self.assertEquals(len(brigadelh_titles), 3) self.assertEquals(len(brigadelh_titles), 3)
def test_get_full_title(self): def test_get_full_title(self):
self.assertEqual(self.armeedeterre.get_full_title(), self.assertEqual(self.armeedeterre.get_full_title(),
"Armée de terre") u"Armée de terre")
self.assertEqual(self.brigadelh.get_full_title(), self.assertEqual(self.brigadelh.get_full_title(),
"Armée de terre / Corps A / Division Alpha / Régiment H / Brigade LH") u"Armée de terre / Corps A / Division Alpha / Régiment H / Brigade LH")
self.assertEqual(self.brigadelh.get_full_title(separator=' - '), self.assertEqual(self.brigadelh.get_full_title(separator=u' - '),
"Armée de terre - Corps A - Division Alpha - Régiment H - Brigade LH") u"Armée de terre - Corps A - Division Alpha - Régiment H - Brigade LH")
self.assertEqual(self.brigadelh.get_full_title(separator=' - ', first_index=2), self.assertEqual(self.brigadelh.get_full_title(separator=u' - ', first_index=2),
"Division Alpha - Régiment H - Brigade LH") u"Division Alpha - Régiment H - Brigade LH")
class TestPosition(TestContentTypes): class TestPosition(TestContentTypes):

View File

@ -1,27 +1,5 @@
[buildout] [buildout]
extends = extends =
https://raw.github.com/collective/buildout.plonetest/master/travis-4.3.x.cfg
base.cfg base.cfg
parts = download install test
parts =
download
install
test
# network speedup
eggs-directory = buildout-cache/eggs
download-cache = buildout-cache/downloads
socket-timeout = 3
allow-hosts =
*.python.org
launchpad.net
[download]
recipe = hexagonit.recipe.download
url = https://launchpad.net/plone/4.2/${buildout:plone-version}/+download/Plone-${buildout:plone-version}-UnifiedInstaller.tgz
[install]
recipe = collective.recipe.cmd
on_install = true
cmds = tar jxvf ${download:location}/Plone-${buildout:plone-version}-UnifiedInstaller/packages/buildout-cache.tar.bz2 1>/dev/null

View File

@ -1,14 +1,2 @@
[versions] [versions]
Pillow = 1.7.8
collective.recipe.cmd = 0.6
decorator = 3.4.0
ecreall.helpers.testing = 1.3
ecreall.helpers.upgrade = 1.1.1
hexagonit.recipe.download = 1.6
ipdb = 0.7
ipython = 0.13.1
plone.api = 1.0.0-rc.1
six = 1.3.0
vobject = 0.8.1c
zc.buildout = 2.1.0 zc.buildout = 2.1.0
zope.schema = 4.2.2