diff options
author | Ruslan Makhmatkhanov <rm@FreeBSD.org> | 2023-08-27 11:31:13 +0000 |
---|---|---|
committer | Ruslan Makhmatkhanov <rm@FreeBSD.org> | 2023-08-27 11:31:13 +0000 |
commit | 38d36e52f825a4e943762e4453ec1ebea13a10c7 (patch) | |
tree | 2685d5d01d36a7e27db564a7018c572e26d9bef5 | |
parent | 97fda573d33daad946ef08bea1ccb5bc777c9d3b (diff) | |
download | ports-38d36e52f825a4e943762e4453ec1ebea13a10c7.tar.gz ports-38d36e52f825a4e943762e4453ec1ebea13a10c7.zip |
zope ports: remove leaf zope ports that have no sense in absence of zope itself
With hat: zope
36 files changed, 10 insertions, 2510 deletions
@@ -7823,3 +7823,13 @@ devel/py-zope.processlifetime||2023-08-27|Remove leaf zope ports that have no se devel/py-zope.sequencesort||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself devel/py-zope.size||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself devel/py-zope.tales||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-five.globalrequest||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.globalrequest||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.traversing||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.publisher||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.browser||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.contenttype||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.testing||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.exceptions||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself +devel/py-zope.i18n||2023-08-27|Remove leaf zope ports that have no sencse in absence of zope itself +devel/py-zope.location||2023-08-27|Remove leaf zope ports that have no sense in absence of zope itself diff --git a/devel/Makefile b/devel/Makefile index 4b33775dd6d5..d0c5897448aa 100644 --- a/devel/Makefile +++ b/devel/Makefile @@ -4655,7 +4655,6 @@ SUBDIR += py-findlibs SUBDIR += py-findpython SUBDIR += py-first - SUBDIR += py-five.globalrequest SUBDIR += py-fixtures SUBDIR += py-flake8 SUBDIR += py-flake8-black @@ -5841,22 +5840,13 @@ SUBDIR += py-zfp SUBDIR += py-zict SUBDIR += py-zipp - SUBDIR += py-zope.browser SUBDIR += py-zope.component SUBDIR += py-zope.configuration - SUBDIR += py-zope.contenttype SUBDIR += py-zope.deprecation SUBDIR += py-zope.event - SUBDIR += py-zope.exceptions - SUBDIR += py-zope.globalrequest - SUBDIR += py-zope.i18n SUBDIR += py-zope.interface - SUBDIR += py-zope.location - SUBDIR += py-zope.publisher SUBDIR += py-zope.schema SUBDIR += py-zope.testbrowser - SUBDIR += py-zope.testing - SUBDIR += py-zope.traversing SUBDIR += py3c SUBDIR += pybind11 SUBDIR += pybind11-json diff --git a/devel/py-five.globalrequest/Makefile b/devel/py-five.globalrequest/Makefile deleted file mode 100644 index 6d4224d3247d..000000000000 --- a/devel/py-five.globalrequest/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -PORTNAME= five.globalrequest -PORTVERSION= 1.0 -PORTREVISION= 1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Zope 2 integration for zope.globalrequest -WWW= https://pypi.org/project/five.globalrequest/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.globalrequest>=0:devel/py-zope.globalrequest@${PY_FLAVOR} - -USES= python -USE_PYTHON= distutils autoplist - -.include <bsd.port.mk> diff --git a/devel/py-five.globalrequest/distinfo b/devel/py-five.globalrequest/distinfo deleted file mode 100644 index 0a9199c47348..000000000000 --- a/devel/py-five.globalrequest/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/five.globalrequest-1.0.tar.gz) = f861e68e0c2397ab84091263753964159fde7e89d19e667a632ac0e625eb5346 -SIZE (zope/five.globalrequest-1.0.tar.gz) = 2718 diff --git a/devel/py-five.globalrequest/pkg-descr b/devel/py-five.globalrequest/pkg-descr deleted file mode 100644 index badb560f7a99..000000000000 --- a/devel/py-five.globalrequest/pkg-descr +++ /dev/null @@ -1 +0,0 @@ -Zope 2 integration for zope.globalrequest. diff --git a/devel/py-zope.browser/Makefile b/devel/py-zope.browser/Makefile deleted file mode 100644 index 9d5bddce4ea9..000000000000 --- a/devel/py-zope.browser/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -PORTNAME= zope.browser -PORTVERSION= 2.1.0 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Shared Zope Toolkit browser components -WWW= https://pypi.org/project/zope.browser/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.interface>=0:devel/py-zope.interface@${PY_FLAVOR} - -NO_ARCH= yes -USES= python -USE_PYTHON= autoplist distutils - -.include <bsd.port.mk> diff --git a/devel/py-zope.browser/distinfo b/devel/py-zope.browser/distinfo deleted file mode 100644 index d226a92218ef..000000000000 --- a/devel/py-zope.browser/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.browser-2.1.0.tar.gz) = 6f50384c01b400d985642a32b341c19090c32bc8ba0d07d88da96bc9b20a5da2 -SIZE (zope/zope.browser-2.1.0.tar.gz) = 8453 diff --git a/devel/py-zope.browser/pkg-descr b/devel/py-zope.browser/pkg-descr deleted file mode 100644 index ebde86658157..000000000000 --- a/devel/py-zope.browser/pkg-descr +++ /dev/null @@ -1 +0,0 @@ -This package provides shared browser components for the Zope Toolkit. diff --git a/devel/py-zope.contenttype/Makefile b/devel/py-zope.contenttype/Makefile deleted file mode 100644 index 4822388053f8..000000000000 --- a/devel/py-zope.contenttype/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -PORTNAME= zope.contenttype -PORTVERSION= 3.5.5 -PORTREVISION= 1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Zope contenttype -WWW= https://pypi.org/project/zope.contenttype/ - -LICENSE= ZPL21 - -USES= python zip -USE_PYTHON= distutils autoplist - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.contenttype/distinfo b/devel/py-zope.contenttype/distinfo deleted file mode 100644 index 97e0848bd01c..000000000000 --- a/devel/py-zope.contenttype/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.contenttype-3.5.5.zip) = 4ccb6f0952ac533a70f11521dbc2df34164fb00ecab746130a625de7cc9b47f7 -SIZE (zope/zope.contenttype-3.5.5.zip) = 20397 diff --git a/devel/py-zope.contenttype/files/patch-2to3 b/devel/py-zope.contenttype/files/patch-2to3 deleted file mode 100644 index 490d88cb1cf2..000000000000 --- a/devel/py-zope.contenttype/files/patch-2to3 +++ /dev/null @@ -1,31 +0,0 @@ ---- src/zope/contenttype/__init__.py.orig 2011-07-27 03:41:00 UTC -+++ src/zope/contenttype/__init__.py -@@ -106,6 +106,6 @@ here = os.path.dirname(os.path.abspath(__file__)) - add_files([os.path.join(here, "mime.types")]) - - if __name__ == '__main__': -- items = mimetypes.types_map.items() -+ items = list(mimetypes.types_map.items()) - items.sort() -- for item in items: print "%s:\t%s" % item -+ for item in items: print("%s:\t%s" % item) ---- src/zope/contenttype/parse.py.orig 2010-04-05 21:04:38 UTC -+++ src/zope/contenttype/parse.py -@@ -112,14 +112,15 @@ def _unescape(string): - return string - - --def join((major, minor, params)): -+def join(xxx_todo_changeme): -+ (major, minor, params) = xxx_todo_changeme - pstr = "" - try: - params.items - except AttributeError: - pass - else: -- params = params.items() -+ params = list(params.items()) - # ensure a predictable order: - params.sort() - for name, value in params: diff --git a/devel/py-zope.contenttype/pkg-descr b/devel/py-zope.contenttype/pkg-descr deleted file mode 100644 index 32fa8b71742d..000000000000 --- a/devel/py-zope.contenttype/pkg-descr +++ /dev/null @@ -1 +0,0 @@ -zope.contenttype is a utility module for content-type handling. diff --git a/devel/py-zope.exceptions/Makefile b/devel/py-zope.exceptions/Makefile deleted file mode 100644 index 13d55556cfe9..000000000000 --- a/devel/py-zope.exceptions/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -PORTNAME= zope.exceptions -PORTVERSION= 4.0.0.1 -PORTREVISION= 1 -CATEGORIES= devel python -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= General Zope Exceptions -WWW= https://pypi.org/project/zope.exceptions/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.interface>0:devel/py-zope.interface@${PY_FLAVOR} - -USES= python -USE_PYTHON= distutils autoplist - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.exceptions/distinfo b/devel/py-zope.exceptions/distinfo deleted file mode 100644 index d5074b176fb1..000000000000 --- a/devel/py-zope.exceptions/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.exceptions-4.0.0.1.tar.gz) = 6d86069fe18ef9671c2e68673f5a3ad2c46cd85d703f3abba3cb2e8d544beaa6 -SIZE (zope/zope.exceptions-4.0.0.1.tar.gz) = 21557 diff --git a/devel/py-zope.exceptions/pkg-descr b/devel/py-zope.exceptions/pkg-descr deleted file mode 100644 index da4f041fb973..000000000000 --- a/devel/py-zope.exceptions/pkg-descr +++ /dev/null @@ -1,3 +0,0 @@ -zope.exceptions contains exception interfaces and implementations -which are so general purpose that they don't belong in Zope -application-specific packages. diff --git a/devel/py-zope.globalrequest/Makefile b/devel/py-zope.globalrequest/Makefile deleted file mode 100644 index 66620c024efe..000000000000 --- a/devel/py-zope.globalrequest/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -PORTNAME= zope.globalrequest -PORTVERSION= 1.1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Global way of retrieving the currently active request -WWW= https://pypi.org/project/zope.globalrequest/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.interface>0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.publisher>0:devel/py-zope.publisher@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.traversing>0:devel/py-zope.traversing@${PY_FLAVOR} - -USES= python -USE_PYTHON= autoplist distutils - -.include <bsd.port.mk> diff --git a/devel/py-zope.globalrequest/distinfo b/devel/py-zope.globalrequest/distinfo deleted file mode 100644 index 3489eff510c4..000000000000 --- a/devel/py-zope.globalrequest/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.globalrequest-1.1.tar.gz) = 19089d97dfe7ee5d5367ef30075783e74e4870dd86c28c50ecd26b1876b509ed -SIZE (zope/zope.globalrequest-1.1.tar.gz) = 5331 diff --git a/devel/py-zope.globalrequest/pkg-descr b/devel/py-zope.globalrequest/pkg-descr deleted file mode 100644 index a84a5c05bb3f..000000000000 --- a/devel/py-zope.globalrequest/pkg-descr +++ /dev/null @@ -1 +0,0 @@ -Global way of retrieving the currently active request. diff --git a/devel/py-zope.i18n/Makefile b/devel/py-zope.i18n/Makefile deleted file mode 100644 index e5d15b4075de..000000000000 --- a/devel/py-zope.i18n/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -PORTNAME= zope.i18n -PORTVERSION= 3.8.0 -PORTREVISION= 1 -CATEGORIES= devel www python -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Zope Internationalization Support -WWW= https://pypi.org/project/zope.i18n/ - -LICENSE= ZPL21 -LICENSE_FILE= ${WRKSRC}/LICENSE.txt - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.event>=0:devel/py-zope.event@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.component>=0:devel/py-zope.component@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.i18nmessageid>=0:textproc/py-zope.i18nmessageid@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.schema>=0:devel/py-zope.schema@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.interface>=3.3.0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}pytz>0:devel/py-pytz@${PY_FLAVOR} - -USES= gettext python -USE_PYTHON= autoplist distutils -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.i18n/distinfo b/devel/py-zope.i18n/distinfo deleted file mode 100644 index 88ebfe880f86..000000000000 --- a/devel/py-zope.i18n/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.i18n-3.8.0.tar.gz) = 753a087ca9d2df6965e787be823bfc9f1b9d3d6aa27a1f0e662b425d6bb4b610 -SIZE (zope/zope.i18n-3.8.0.tar.gz) = 613058 diff --git a/devel/py-zope.i18n/files/patch-2to3 b/devel/py-zope.i18n/files/patch-2to3 deleted file mode 100644 index 7764ca1fd65b..000000000000 --- a/devel/py-zope.i18n/files/patch-2to3 +++ /dev/null @@ -1,529 +0,0 @@ ---- src/zope/i18n/format.py.orig 2012-03-15 13:58:09 UTC -+++ src/zope/i18n/format.py -@@ -86,7 +86,7 @@ class DateTimeFormat(object): - - # Map the parsing results to a datetime object - ordered = [None, None, None, None, None, None, None] -- bin_pattern = filter(lambda x: isinstance(x, tuple), bin_pattern) -+ bin_pattern = [x for x in bin_pattern if isinstance(x, tuple)] - - # Handle years; note that only 'yy' and 'yyyy' are allowed - if ('y', 2) in bin_pattern: -@@ -124,7 +124,7 @@ class DateTimeFormat(object): - - # Shortcut for the simple int functions - dt_fields_map = {'d': 2, 'H': 3, 'm': 4, 's': 5, 'S': 6} -- for field in dt_fields_map.keys(): -+ for field in list(dt_fields_map.keys()): - entry = _findFormattingCharacterInPattern(field, bin_pattern) - if not entry: continue - pos = dt_fields_map[field] -@@ -186,7 +186,7 @@ class DateTimeFormat(object): - else: - bin_pattern = self._bin_pattern - -- text = u'' -+ text = '' - info = buildDateTimeInfo(obj, self.calendar, bin_pattern) - for elem in bin_pattern: - text += info.get(elem, elem) -@@ -209,18 +209,18 @@ class NumberFormat(object): - def __init__(self, pattern=None, symbols={}): - # setup default symbols - self.symbols = { -- u'decimal': u'.', -- u'group': u',', -- u'list': u';', -- u'percentSign': u'%', -- u'nativeZeroDigit': u'0', -- u'patternDigit': u'#', -- u'plusSign': u'+', -- u'minusSign': u'-', -- u'exponential': u'E', -- u'perMille': u'\xe2\x88\x9e', -- u'infinity': u'\xef\xbf\xbd', -- u'nan': '' } -+ 'decimal': '.', -+ 'group': ',', -+ 'list': ';', -+ 'percentSign': '%', -+ 'nativeZeroDigit': '0', -+ 'patternDigit': '#', -+ 'plusSign': '+', -+ 'minusSign': '-', -+ 'exponential': 'E', -+ 'perMille': '\xe2\x88\x9e', -+ 'infinity': '\xef\xbf\xbd', -+ 'nan': '' } - self.symbols.update(symbols) - self._pattern = pattern - self._bin_pattern = None -@@ -360,7 +360,7 @@ class NumberFormat(object): - # The exponential might have a mandatory sign; remove it from the - # bin_pattern and remember the setting - exp_bin_pattern = bin_pattern[EXPONENTIAL] -- plus_sign = u'' -+ plus_sign = '' - if exp_bin_pattern.startswith('+'): - plus_sign = self.symbols['plusSign'] - exp_bin_pattern = exp_bin_pattern[1:] -@@ -444,7 +444,7 @@ class NumberFormat(object): - text += bin_pattern[PADDING4]*post_padding - - # TODO: Need to make sure unicode is everywhere -- return unicode(text) -+ return str(text) - - - -@@ -599,7 +599,7 @@ def buildDateTimeInfo(dt, calendar, pattern): - """Create the bits and pieces of the datetime object that can be put - together.""" - if isinstance(dt, datetime.time): -- dt = datetime.datetime(1969, 01, 01, dt.hour, dt.minute, dt.second, -+ dt = datetime.datetime(1969, 0o1, 0o1, dt.hour, dt.minute, dt.second, - dt.microsecond) - elif (isinstance(dt, datetime.date) and - not isinstance(dt, datetime.datetime)): -@@ -631,8 +631,8 @@ def buildDateTimeInfo(dt, calendar, pattern): - tz_name = tzinfo.tzname(dt) or tz_defaultname - tz_fullname = getattr(tzinfo, 'zone', None) or tz_name - -- info = {('y', 2): unicode(dt.year)[2:], -- ('y', 4): unicode(dt.year), -+ info = {('y', 2): str(dt.year)[2:], -+ ('y', 4): str(dt.year), - } - - # Generic Numbers -@@ -643,7 +643,7 @@ def buildDateTimeInfo(dt, calendar, pattern): - ('S', dt.microsecond), ('w', int(dt.strftime('%W'))), - ('W', week_in_month)): - for entry in _findFormattingCharacterInPattern(field, pattern): -- info[entry] = (u'%%.%ii' %entry[1]) %value -+ info[entry] = ('%%.%ii' %entry[1]) %value - - # am/pm marker (Text) - for entry in _findFormattingCharacterInPattern('a', pattern): -@@ -657,9 +657,9 @@ def buildDateTimeInfo(dt, calendar, pattern): - # time zone (Text) - for entry in _findFormattingCharacterInPattern('z', pattern): - if entry[1] == 1: -- info[entry] = u"%s%i%.2i" %(tz_sign, tz_hours, tz_mins) -+ info[entry] = "%s%i%.2i" %(tz_sign, tz_hours, tz_mins) - elif entry[1] == 2: -- info[entry] = u"%s%.2i:%.2i" %(tz_sign, tz_hours, tz_mins) -+ info[entry] = "%s%.2i:%.2i" %(tz_sign, tz_hours, tz_mins) - elif entry[1] == 3: - info[entry] = tz_name - else: -@@ -668,9 +668,9 @@ def buildDateTimeInfo(dt, calendar, pattern): - # month in year (Text and Number) - for entry in _findFormattingCharacterInPattern('M', pattern): - if entry[1] == 1: -- info[entry] = u'%i' %dt.month -+ info[entry] = '%i' %dt.month - elif entry[1] == 2: -- info[entry] = u'%.2i' %dt.month -+ info[entry] = '%.2i' %dt.month - elif entry[1] == 3: - info[entry] = calendar.months[dt.month][1] - else: -@@ -679,9 +679,9 @@ def buildDateTimeInfo(dt, calendar, pattern): - # day in week (Text and Number) - for entry in _findFormattingCharacterInPattern('E', pattern): - if entry[1] == 1: -- info[entry] = u'%i' %weekday -+ info[entry] = '%i' %weekday - elif entry[1] == 2: -- info[entry] = u'%.2i' %weekday -+ info[entry] = '%.2i' %weekday - elif entry[1] == 3: - info[entry] = calendar.days[dt.weekday() + 1][1] - else: ---- src/zope/i18n/locales/tests/test_locales.py.orig 2012-03-15 13:58:06 UTC -+++ src/zope/i18n/locales/tests/test_locales.py -@@ -35,7 +35,7 @@ class TestILocaleProvider(TestCase): - self.locales = self._makeNewProvider() - - def testInterfaceConformity(self): -- self.assert_(ILocaleProvider.providedBy(self.locales)) -+ self.assertTrue(ILocaleProvider.providedBy(self.locales)) - - def test_getLocale(self): - locale = self.locales.getLocale(None, None, None) -@@ -66,10 +66,10 @@ class TestLocaleProvider(TestILocaleProvider): - - def test_loadLocale(self): - self.locales.loadLocale(None, None, None) -- self.assertEqual(self.locales._locales.keys(), [(None, None, None)]) -+ self.assertEqual(list(self.locales._locales.keys()), [(None, None, None)]) - - self.locales.loadLocale('en', None, None) -- self.assert_(('en', None, None) in self.locales._locales.keys()) -+ self.assertTrue(('en', None, None) in list(self.locales._locales.keys())) - - def test_loadLocaleFailure(self): - self.assertRaises(LoadLocaleError, self.locales.loadLocale, 'zzz') -@@ -97,19 +97,19 @@ class TestLocaleAndProvider(TestCase): - def test_getDateFormatter(self): - formatter = self.locale.dates.getFormatter('date', 'medium') - self.assertEqual(formatter.getPattern(), 'MMM d, yyyy') -- self.assertEqual(formatter.format(datetime.date(2003, 01, 02)), -+ self.assertEqual(formatter.format(datetime.date(2003, 0o1, 0o2)), - 'Jan 2, 2003') - self.assertEqual(formatter.parse('Jan 2, 2003'), -- datetime.date(2003, 01, 02)) -+ datetime.date(2003, 0o1, 0o2)) - - def test_getDateTimeFormatter(self): - formatter = self.locale.dates.getFormatter('dateTime', 'medium') - self.assertEqual(formatter.getPattern(), 'MMM d, yyyy h:mm:ss a') - self.assertEqual( -- formatter.format(datetime.datetime(2003, 01, 02, 12, 30)), -+ formatter.format(datetime.datetime(2003, 0o1, 0o2, 12, 30)), - 'Jan 2, 2003 12:30:00 PM') - self.assertEqual(formatter.parse('Jan 2, 2003 12:30:00 PM'), -- datetime.datetime(2003, 01, 02, 12, 30)) -+ datetime.datetime(2003, 0o1, 0o2, 12, 30)) - - def test_getNumberFormatter(self): - formatter = self.locale.numbers.getFormatter('decimal') -@@ -124,13 +124,13 @@ class TestGlobalLocaleProvider(TestCase): - - def testLoading(self): - locales.loadLocale(None, None, None) -- self.assert_(locales._locales.has_key((None, None, None))) -+ self.assertTrue((None, None, None) in locales._locales) - locales.loadLocale('en', None, None) -- self.assert_(locales._locales.has_key(('en', None, None))) -+ self.assertTrue(('en', None, None) in locales._locales) - locales.loadLocale('en', 'US', None) -- self.assert_(locales._locales.has_key(('en', 'US', None))) -+ self.assertTrue(('en', 'US', None) in locales._locales) - locales.loadLocale('en', 'US', 'POSIX') -- self.assert_(locales._locales.has_key(('en', 'US', 'POSIX'))) -+ self.assertTrue(('en', 'US', 'POSIX') in locales._locales) - - def test_getLocale(self): - locale = locales.getLocale('en', 'GB') ---- src/zope/i18n/tests/test_formats.py.orig 2012-03-15 13:58:09 UTC -+++ src/zope/i18n/tests/test_formats.py -@@ -34,7 +34,7 @@ class LocaleStub(object): - - class LocaleCalendarStub(object): - -- type = u'gregorian' -+ type = 'gregorian' - - months = { 1: ('Januar', 'Jan'), 2: ('Februar', 'Feb'), - 3: ('Maerz', 'Mrz'), 4: ('April', 'Apr'), -@@ -59,7 +59,7 @@ class LocaleCalendarStub(object): - return [self.months.get(type, (None, None))[0] for type in range(1, 13)] - - def getMonthTypeFromName(self, name): -- for item in self.months.items(): -+ for item in list(self.months.items()): - if item[1][0] == name: - return item[0] - -@@ -67,7 +67,7 @@ class LocaleCalendarStub(object): - return [self.months.get(type, (None, None))[1] for type in range(1, 13)] - - def getMonthTypeFromAbbreviation(self, abbr): -- for item in self.months.items(): -+ for item in list(self.months.items()): - if item[1][1] == abbr: - return item[0] - -@@ -75,7 +75,7 @@ class LocaleCalendarStub(object): - return [self.days.get(type, (None, None))[0] for type in range(1, 8)] - - def getDayTypeFromName(self, name): -- for item in self.days.items(): -+ for item in list(self.days.items()): - if item[1][0] == name: - return item[0] - -@@ -83,7 +83,7 @@ class LocaleCalendarStub(object): - return [self.days.get(type, (None, None))[1] for type in range(1, 8)] - - def getDayTypeFromAbbreviation(self, abbr): -- for item in self.days.items(): -+ for item in list(self.days.items()): - if item[1][1] == abbr: - return item[0] - -@@ -171,14 +171,14 @@ class TestDateTimePatternParser(TestCase): - # Quote not closed - try: - parseDateTimePattern("HH' Uhr") -- except DateTimePatternParseError, err: -+ except DateTimePatternParseError as err: - self.assertEqual( - str(err), 'The quote starting at character 2 is not closed.') - # Test correct length of characters in datetime fields - try: - parseDateTimePattern("HHHHH") -- except DateTimePatternParseError, err: -- self.assert_(str(err).endswith('You have: 5')) -+ except DateTimePatternParseError as err: -+ self.assertTrue(str(err).endswith('You have: 5')) - - - class TestBuildDateTimeParseInfo(TestCase): -@@ -222,9 +222,9 @@ class TestBuildDateTimeParseInfo(TestCase): - self.assertEqual(self.info(('M', 2)), '([0-9]{2})') - - def testMonthNames(self): -- names = [u'Januar', u'Februar', u'Maerz', u'April', -- u'Mai', u'Juni', u'Juli', u'August', u'September', u'Oktober', -- u'November', u'Dezember'] -+ names = ['Januar', 'Februar', 'Maerz', 'April', -+ 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', -+ 'November', 'Dezember'] - self.assertEqual(self.info(('M', 4)), '('+'|'.join(names)+')') - - def testMonthAbbr(self): -@@ -255,26 +255,26 @@ class TestDateTimeFormat(TestCase): - format = DateTimeFormat(calendar=LocaleCalendarStub()) - - def testInterfaceConformity(self): -- self.assert_(IDateTimeFormat.providedBy(self.format)) -+ self.assertTrue(IDateTimeFormat.providedBy(self.format)) - - def testParseSimpleDateTime(self): - # German short - self.assertEqual( - self.format.parse('02.01.03 21:48', 'dd.MM.yy HH:mm'), -- datetime.datetime(2003, 01, 02, 21, 48)) -+ datetime.datetime(2003, 0o1, 0o2, 21, 48)) - - def testParseRealDateTime(self): - # German medium - self.assertEqual( - self.format.parse('02.01.2003 21:48:01', 'dd.MM.yyyy HH:mm:ss'), -- datetime.datetime(2003, 01, 02, 21, 48, 01)) -+ datetime.datetime(2003, 0o1, 0o2, 21, 48, 0o1)) - - # German long - # TODO: The parser does not support timezones yet. - self.assertEqual(self.format.parse( - '2. Januar 2003 21:48:01 +100', - 'd. MMMM yyyy HH:mm:ss z'), -- datetime.datetime(2003, 01, 02, 21, 48, 01, -+ datetime.datetime(2003, 0o1, 0o2, 21, 48, 0o1, - tzinfo=pytz.timezone('Europe/Berlin'))) - - # German full -@@ -282,13 +282,13 @@ class TestDateTimeFormat(TestCase): - self.assertEqual(self.format.parse( - 'Donnerstag, 2. Januar 2003 21:48 Uhr +100', - "EEEE, d. MMMM yyyy H:mm' Uhr 'z"), -- datetime.datetime(2003, 01, 02, 21, 48, -+ datetime.datetime(2003, 0o1, 0o2, 21, 48, - tzinfo=pytz.timezone('Europe/Berlin'))) - - def testParseAMPMDateTime(self): - self.assertEqual( - self.format.parse('02.01.03 09:48 nachm.', 'dd.MM.yy hh:mm a'), -- datetime.datetime(2003, 01, 02, 21, 48)) -+ datetime.datetime(2003, 0o1, 0o2, 21, 48)) - - def testParseTimeZone(self): - dt = self.format.parse('09:48 -600', 'HH:mm z') -@@ -352,28 +352,28 @@ class TestDateTimeFormat(TestCase): - def testParse12PM(self): - self.assertEqual( - self.format.parse('01.01.03 12:00 nachm.', 'dd.MM.yy hh:mm a'), -- datetime.datetime(2003, 01, 01, 12, 00, 00, 00)) -+ datetime.datetime(2003, 0o1, 0o1, 12, 00, 00, 00)) - - def testParseUnusualFormats(self): - self.assertEqual( - self.format.parse('001. Januar 03 0012:00', - 'ddd. MMMMM yy HHHH:mm'), -- datetime.datetime(2003, 01, 01, 12, 00, 00, 00)) -+ datetime.datetime(2003, 0o1, 0o1, 12, 00, 00, 00)) - self.assertEqual( - self.format.parse('0001. Jan 2003 0012:00 vorm.', - 'dddd. MMM yyyy hhhh:mm a'), -- datetime.datetime(2003, 01, 01, 00, 00, 00, 00)) -+ datetime.datetime(2003, 0o1, 0o1, 00, 00, 00, 00)) - - def testFormatSimpleDateTime(self): - # German short - self.assertEqual( -- self.format.format(datetime.datetime(2003, 01, 02, 21, 48), -+ self.format.format(datetime.datetime(2003, 0o1, 0o2, 21, 48), - 'dd.MM.yy HH:mm'), - '02.01.03 21:48') - - def testFormatRealDateTime(self): - tz = pytz.timezone('Europe/Berlin') -- dt = datetime.datetime(2003, 01, 02, 21, 48, 01, tzinfo=tz) -+ dt = datetime.datetime(2003, 0o1, 0o2, 21, 48, 0o1, tzinfo=tz) - # German medium - self.assertEqual( - self.format.format(dt, 'dd.MM.yyyy HH:mm:ss'), -@@ -391,47 +391,47 @@ class TestDateTimeFormat(TestCase): - - def testFormatAMPMDateTime(self): - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 21, 48), -+ datetime.datetime(2003, 0o1, 0o2, 21, 48), - 'dd.MM.yy hh:mm a'), - '02.01.03 09:48 nachm.') - - def testFormatAllWeekdays(self): - for day in range(1, 8): - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, day+5, 21, 48), -+ datetime.datetime(2003, 0o1, day+5, 21, 48), - "EEEE, d. MMMM yyyy H:mm' Uhr 'z"), - '%s, %i. Januar 2003 21:48 Uhr +000' %( - self.format.calendar.days[day][0], day+5)) - - def testFormatTimeZone(self): - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, 00), 'z'), -+ datetime.datetime(2003, 0o1, 0o2, 12, 00), 'z'), - '+000') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, 00), 'zz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, 00), 'zz'), - '+00:00') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, 00), 'zzz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, 00), 'zzz'), - 'UTC') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, 00), 'zzzz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, 00), 'zzzz'), - 'UTC') - tz = pytz.timezone('US/Eastern') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, tzinfo=tz), 'z'), -+ datetime.datetime(2003, 0o1, 0o2, 12, tzinfo=tz), 'z'), - '-500') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, tzinfo=tz), 'zz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, tzinfo=tz), 'zz'), - '-05:00') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, tzinfo=tz), 'zzz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, tzinfo=tz), 'zzz'), - 'EST') - self.assertEqual(self.format.format( -- datetime.datetime(2003, 01, 02, 12, tzinfo=tz), 'zzzz'), -+ datetime.datetime(2003, 0o1, 0o2, 12, tzinfo=tz), 'zzzz'), - 'US/Eastern') - - def testFormatWeekDay(self): -- date = datetime.date(2003, 01, 02) -+ date = datetime.date(2003, 0o1, 0o2) - self.assertEqual(self.format.format(date, "E"), - '4') - self.assertEqual(self.format.format(date, "EE"), -@@ -455,7 +455,7 @@ class TestDateTimeFormat(TestCase): - '05') - - def testFormatDayOfWeekInMonth(self): -- date = datetime.date(2003, 01, 02) -+ date = datetime.date(2003, 0o1, 0o2) - self.assertEqual(self.format.format(date, "F"), - '1') - self.assertEqual(self.format.format(date, "FF"), -@@ -526,11 +526,11 @@ class TestDateTimeFormat(TestCase): - - def testFormatSimpleHourRepresentation(self): - self.assertEqual( -- self.format.format(datetime.datetime(2003, 01, 02, 23, 00), -+ self.format.format(datetime.datetime(2003, 0o1, 0o2, 23, 00), - 'dd.MM.yy h:mm:ss a'), - '02.01.03 11:00:00 nachm.') - self.assertEqual( -- self.format.format(datetime.datetime(2003, 01, 02, 02, 00), -+ self.format.format(datetime.datetime(2003, 0o1, 0o2, 0o2, 00), - 'dd.MM.yy h:mm:ss a'), - '02.01.03 2:00:00 vorm.') - self.assertEqual( -@@ -549,54 +549,54 @@ class TestDateTimeFormat(TestCase): - def testFormatDayInYear(self): - self.assertEqual( - self.format.format(datetime.date(2003, 1, 3), 'D'), -- u'3') -+ '3') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 3), 'DD'), -- u'03') -+ '03') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 3), 'DDD'), -- u'003') -+ '003') - self.assertEqual( - self.format.format(datetime.date(2003, 12, 31), 'D'), -- u'365') -+ '365') - self.assertEqual( - self.format.format(datetime.date(2003, 12, 31), 'DD'), -- u'365') -+ '365') - self.assertEqual( - self.format.format(datetime.date(2003, 12, 31), 'DDD'), -- u'365') -+ '365') - self.assertEqual( - self.format.format(datetime.date(2004, 12, 31), 'DDD'), -- u'366') -+ '366') - - def testFormatDayOfWeekInMOnth(self): - self.assertEqual( - self.format.format(datetime.date(2003, 1, 3), 'F'), -- u'1') -+ '1') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 10), 'F'), -- u'2') -+ '2') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 17), 'F'), -- u'3') -+ '3') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 24), 'F'), -- u'4') -+ '4') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 31), 'F'), -- u'5') -+ '5') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 6), 'F'), -- u'1') -+ '1') - - def testFormatUnusualFormats(self): - self.assertEqual( - self.format.format(datetime.date(2003, 1, 3), 'DDD-yyyy'), -- u'003-2003') -+ '003-2003') - self.assertEqual( - self.format.format(datetime.date(2003, 1, 10), - "F. EEEE 'im' MMMM, yyyy"), -- u'2. Freitag im Januar, 2003') -+ '2. Freitag im Januar, 2003') - - - -@@ -828,7 +828,7 @@ class TestNumberFormat(TestCase): - 'infinity': 'oo', 'nan': 'N/A'}) - - def testInterfaceConformity(self): -- self.assert_(INumberFormat.providedBy(self.format)) -+ self.assertTrue(INumberFormat.providedBy(self.format)) - - def testParseSimpleInteger(self): - self.assertEqual(self.format.parse('23341', '###0'), diff --git a/devel/py-zope.i18n/pkg-descr b/devel/py-zope.i18n/pkg-descr deleted file mode 100644 index 520c3dbaca61..000000000000 --- a/devel/py-zope.i18n/pkg-descr +++ /dev/null @@ -1,5 +0,0 @@ -zope.i18n implements several APIs related to internationalization -and localization: - * Locale objects for all locales maintained by the ICU project. - * Gettext-based message catalogs for message strings. - * Locale discovery for Web-based requests. diff --git a/devel/py-zope.location/Makefile b/devel/py-zope.location/Makefile deleted file mode 100644 index 34706edcc615..000000000000 --- a/devel/py-zope.location/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -PORTNAME= zope.location -PORTVERSION= 3.9.1 -PORTREVISION= 1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Zope Location -WWW= https://pypi.org/project/zope.location/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.component>=3.8:devel/py-zope.component@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.interface>=0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.proxy>3.3:net/py-zope.proxy@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.schema>=3.6:devel/py-zope.schema@${PY_FLAVOR} - -USES= python -USE_PYTHON= distutils autoplist - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.location/distinfo b/devel/py-zope.location/distinfo deleted file mode 100644 index b719bb24f88f..000000000000 --- a/devel/py-zope.location/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.location-3.9.1.tar.gz) = cec909f57def8005973ebff0deada11d2fc25438da34d691a2417eaca2966116 -SIZE (zope/zope.location-3.9.1.tar.gz) = 17737 diff --git a/devel/py-zope.location/pkg-descr b/devel/py-zope.location/pkg-descr deleted file mode 100644 index bdaeef0f4c0a..000000000000 --- a/devel/py-zope.location/pkg-descr +++ /dev/null @@ -1 +0,0 @@ -zope.location are special objects that has a structural location. diff --git a/devel/py-zope.publisher/Makefile b/devel/py-zope.publisher/Makefile deleted file mode 100644 index 256757258cca..000000000000 --- a/devel/py-zope.publisher/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -PORTNAME= zope.publisher -PORTVERSION= 3.13.1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Publishes Python objects on the web -WWW= https://pypi.org/project/zope.publisher/ - -LICENSE= ZPL21 -LICENSE_FILE= ${WRKSRC}/LICENSE.txt - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.component>=0:devel/py-zope.component@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.interface>=0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.proxy>=0:net/py-zope.proxy@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.location>=0:devel/py-zope.location@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.testing>=0:devel/py-zope.testing@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.configuration>=0:devel/py-zope.configuration@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.browser>=0:devel/py-zope.browser@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.contenttype>=3.5:devel/py-zope.contenttype@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.event>=0:devel/py-zope.event@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.exceptions>=0:devel/py-zope.exceptions@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.i18n>=0:devel/py-zope.i18n@${PY_FLAVOR} - -USES= python zip -USE_PYTHON= autoplist distutils - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.publisher/distinfo b/devel/py-zope.publisher/distinfo deleted file mode 100644 index 7e366c3d73d9..000000000000 --- a/devel/py-zope.publisher/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.publisher-3.13.1.zip) = f8dd44ddb15d0ce6377b25485db738c992861de22b380efdc52ba6663616d6d2 -SIZE (zope/zope.publisher-3.13.1.zip) = 130201 diff --git a/devel/py-zope.publisher/files/patch-2to3 b/devel/py-zope.publisher/files/patch-2to3 deleted file mode 100644 index ccf232582607..000000000000 --- a/devel/py-zope.publisher/files/patch-2to3 +++ /dev/null @@ -1,1513 +0,0 @@ ---- src/zope/publisher/ftp.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/ftp.py -@@ -27,7 +27,7 @@ class FTPResponse(BaseResponse): - - def getResult(self): - if getattr(self, '_exc', None) is not None: -- raise self._exc[0], self._exc[1], self._exc[2] -+ raise self._exc[0](self._exc[1]).with_traceback(self._exc[2]) - return self._result - - def handleException(self, exc_info): ---- src/zope/publisher/http.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/http.py -@@ -13,7 +13,7 @@ - ############################################################################## - """HTTP Publisher - """ --from cStringIO import StringIO -+from io import StringIO - from zope.i18n.interfaces import IUserPreferredCharsets - from zope.i18n.interfaces import IUserPreferredLanguages - from zope.i18n.locales import locales, LoadLocaleError -@@ -31,13 +31,13 @@ from zope.publisher.interfaces.http import IHTTPVirtua - from zope.publisher.interfaces.http import IResult - from zope.publisher.interfaces.logginginfo import ILoggingInfo - from zope.publisher.skinnable import setDefaultSkin --import Cookie -+import http.cookies - import cgi - import logging - import tempfile - import types --import urllib --import urlparse -+import urllib.request, urllib.parse, urllib.error -+import urllib.parse - import zope.component - import zope.contenttype.parse - import zope.event -@@ -65,7 +65,7 @@ def sane_environment(env): - # or HTTP_CGI_AUTHORIZATION hacks. - # It also makes sure PATH_INFO is a unicode string. - dict = {} -- for key, val in env.items(): -+ for key, val in list(env.items()): - while key.startswith('REDIRECT_'): - key = key[9:] - dict[key] = val -@@ -138,7 +138,7 @@ status_codes={} - def init_status_codes(): - # Add mappings for builtin exceptions and - # provide text -> error code lookups. -- for key, val in status_reasons.items(): -+ for key, val in list(status_reasons.items()): - status_codes[val.replace(' ', '').lower()] = key - status_codes[val.lower()] = key - status_codes[key] = key -@@ -176,7 +176,7 @@ class URLGetter(object): - return self.__request.getURL(i) - else: - return self.__request.getApplicationURL(i) -- except IndexError, v: -+ except IndexError as v: - if v[0] == i: - return default - raise -@@ -352,7 +352,7 @@ class HTTPRequest(BaseRequest): - script = get_env('SCRIPT_NAME', '').strip() - - # _script and the other _names are meant for URL construction -- self._app_names = filter(None, script.split('/')) -+ self._app_names = [_f for _f in script.split('/') if _f] - - # get server URL and store it too, since we are already looking it up - server_url = get_env('SERVER_URL', None) -@@ -379,9 +379,9 @@ class HTTPRequest(BaseRequest): - else: - protocol = 'http' - -- if environ.has_key('HTTP_HOST'): -+ if 'HTTP_HOST' in environ: - host = environ['HTTP_HOST'].strip() -- hostname, port = urllib.splitport(host) -+ hostname, port = urllib.parse.splitport(host) - else: - hostname = environ.get('SERVER_NAME', '').strip() - port = environ.get('SERVER_PORT', '') -@@ -401,13 +401,13 @@ class HTTPRequest(BaseRequest): - - # ignore cookies on a CookieError - try: -- c = Cookie.SimpleCookie(text) -- except Cookie.CookieError, e: -+ c = http.cookies.SimpleCookie(text) -+ except http.cookies.CookieError as e: - eventlog.warn(e) - return result - -- for k,v in c.items(): -- result[unicode(k, ENCODING)] = unicode(v.value, ENCODING) -+ for k,v in list(c.items()): -+ result[str(k, ENCODING)] = str(v.value, ENCODING) - - return result - -@@ -521,7 +521,7 @@ class HTTPRequest(BaseRequest): - raise IndexError(level) - names = names[:-level] - # See: http://www.ietf.org/rfc/rfc2718.txt, Section 2.2.5 -- names = [urllib.quote(name.encode("utf-8"), safe='/+@') -+ names = [urllib.parse.quote(name.encode("utf-8"), safe='/+@') - for name in names] - - if path_only: -@@ -544,7 +544,7 @@ class HTTPRequest(BaseRequest): - names = self._app_names - - # See: http://www.ietf.org/rfc/rfc2718.txt, Section 2.2.5 -- names = [urllib.quote(name.encode("utf-8"), safe='/+@') -+ names = [urllib.parse.quote(name.encode("utf-8"), safe='/+@') - for name in names] - - if path_only: -@@ -604,7 +604,7 @@ class HTTPRequest(BaseRequest): - d = {} - d.update(self._environ) - d.update(self._cookies) -- return d.keys() -+ return list(d.keys()) - - - -@@ -645,7 +645,7 @@ class HTTPResponse(BaseResponse): - try: - status = int(status) - except ValueError: -- if isinstance(status, basestring): -+ if isinstance(status, str): - status = status.lower() - # Use a standard status code, falling back to 500 for - # nonstandard values (such as "valueerror") -@@ -701,7 +701,7 @@ class HTTPResponse(BaseResponse): - result.append( - ("X-Powered-By", "Zope (www.zope.org), Python (www.python.org)")) - -- for key, values in headers.items(): -+ for key, values in list(headers.items()): - if key.lower() == key: - # only change non-literal header names - key = '-'.join([k.capitalize() for k in key.split('-')]) -@@ -729,7 +729,7 @@ class HTTPResponse(BaseResponse): - def expireCookie(self, name, **kw): - 'See IHTTPResponse' - dict = {'max_age':0, 'expires':'Wed, 31-Dec-97 23:59:59 GMT'} -- for k, v in kw.items(): -+ for k, v in list(kw.items()): - if v is not None: - dict[k] = v - cookies = self._cookies -@@ -744,7 +744,7 @@ class HTTPResponse(BaseResponse): - cookies = self._cookies - cookie = cookies.setdefault(name, {}) - -- for k, v in kw.items(): -+ for k, v in list(kw.items()): - if v is not None: - cookie[k.lower()] = v - -@@ -764,7 +764,7 @@ class HTTPResponse(BaseResponse): - r = zope.component.queryMultiAdapter( - (result, self._request), IResult) - if r is None: -- if isinstance(result, basestring): -+ if isinstance(result, str): - r = result - elif result is None: - r = '' -@@ -772,7 +772,7 @@ class HTTPResponse(BaseResponse): - raise TypeError( - 'The result should be None, a string, or adaptable to ' - 'IResult.') -- if isinstance(r, basestring): -+ if isinstance(r, str): - r, headers = self._implicitResult(r) - self._headers.update(dict((k, [v]) for (k, v) in headers)) - r = (r,) # chunking should be much larger than per character -@@ -796,7 +796,7 @@ class HTTPResponse(BaseResponse): - encoding = getCharsetUsingRequest(self._request) or 'utf-8' - content_type = self.getHeader('content-type') - -- if isinstance(body, unicode): -+ if isinstance(body, str): - if not unicode_mimetypes_re.match(content_type): - raise ValueError( - 'Unicode results must have a text, RFC 3023, or ' -@@ -818,7 +818,7 @@ class HTTPResponse(BaseResponse): - - params['charset'] = encoding - content_type = "%s/%s;" % (major, minor) -- content_type += ";".join(k + "=" + v for k, v in params.items()) -+ content_type += ";".join(k + "=" + v for k, v in list(params.items())) - - if content_type: - headers = [('content-type', content_type), -@@ -833,13 +833,13 @@ class HTTPResponse(BaseResponse): - Calls self.setBody() with an error response. - """ - t, v = exc_info[:2] -- if isinstance(t, (types.ClassType, type)): -+ if isinstance(t, type): - if issubclass(t, Redirect): - self.redirect(v.getLocation()) - return - title = tname = t.__name__ - else: -- title = tname = unicode(t) -+ title = tname = str(t) - - # Throwing non-protocol-specific exceptions is a good way - # for apps to control the status code. -@@ -851,15 +851,15 @@ class HTTPResponse(BaseResponse): - - def internalError(self): - 'See IPublisherResponse' -- self.setStatus(500, u"The engines can't take any more, Jim!") -+ self.setStatus(500, "The engines can't take any more, Jim!") - - def _html(self, title, content): - t = cgi.escape(title) - return ( -- u"<html><head><title>%s</title></head>\n" -- u"<body><h2>%s</h2>\n" -- u"%s\n" -- u"</body></html>\n" % -+ "<html><head><title>%s</title></head>\n" -+ "<body><h2>%s</h2>\n" -+ "%s\n" -+ "</body></html>\n" % - (t, t, content) - ) - -@@ -900,14 +900,14 @@ class HTTPResponse(BaseResponse): - - def _cookie_list(self): - try: -- c = Cookie.SimpleCookie() -- except Cookie.CookieError, e: -+ c = http.cookies.SimpleCookie() -+ except http.cookies.CookieError as e: - eventlog.warn(e) - return [] -- for name, attrs in self._cookies.items(): -+ for name, attrs in list(self._cookies.items()): - name = str(name) - c[name] = attrs['value'].encode(ENCODING) -- for k,v in attrs.items(): -+ for k,v in list(attrs.items()): - if k == 'value': - continue - if k == 'secure': -@@ -918,7 +918,7 @@ class HTTPResponse(BaseResponse): - k = 'max-age' - elif k == 'comment': - # Encode rather than throw an exception -- v = urllib.quote(v.encode('utf-8'), safe="/?:@&+") -+ v = urllib.parse.quote(v.encode('utf-8'), safe="/?:@&+") - c[name][k] = str(v) - return str(c).splitlines() - -@@ -938,7 +938,7 @@ def sort_charsets(x, y): - - - def extract_host(url): -- scheme, host, path, query, fragment = urlparse.urlsplit(url) -+ scheme, host, path, query, fragment = urllib.parse.urlsplit(url) - if ':' not in host: - port = DEFAULT_PORTS.get(scheme) - if port: ---- src/zope/publisher/interfaces/__init__.py.orig 2012-07-02 06:19:42 UTC -+++ src/zope/publisher/interfaces/__init__.py -@@ -60,10 +60,10 @@ class NotFound(LookupError, TraversalException): - - def __str__(self): - try: -- ob = `self.ob` -+ ob = repr(self.ob) - except: - ob = 'unprintable object' -- return 'Object: %s, name: %s' % (ob, `self.name`) -+ return 'Object: %s, name: %s' % (ob, repr(self.name)) - - class IDebugError(ITraversalException): - def getObject(): ---- src/zope/publisher/publish.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/publish.py -@@ -64,8 +64,8 @@ def mapply(obj, positional=(), request={}): - - unwrapped, wrapperCount = unwrapMethod(unwrapped) - -- code = unwrapped.func_code -- defaults = unwrapped.func_defaults -+ code = unwrapped.__code__ -+ defaults = unwrapped.__defaults__ - names = code.co_varnames[wrapperCount:code.co_argcount] - - nargs = len(names) -@@ -154,7 +154,7 @@ def publish(request, handle_errors=True): - - break # Successful. - -- except Retry, retryException: -+ except Retry as retryException: - if request.supportsRetry(): - # Create a copy of the request and use it. - newrequest = request.retry() -@@ -187,7 +187,7 @@ def publish(request, handle_errors=True): - - response = request.response - if to_raise is not None: -- raise to_raise[0], to_raise[1], to_raise[2] -+ raise to_raise[0](to_raise[1]).with_traceback(to_raise[2]) - - finally: - to_raise = None # Avoid circ. ref. ---- src/zope/publisher/tests/test_browserrequest.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/tests/test_browserrequest.py -@@ -14,7 +14,7 @@ - - import sys - import unittest --from StringIO import StringIO -+from io import StringIO - - from zope.interface import implements, directlyProvides, Interface - from zope.interface.verify import verifyObject -@@ -101,12 +101,12 @@ class BrowserTests(HTTPTests): - class Item(object): - """Required docstring for the publisher.""" - def __call__(self, a, b): -- return u"%s, %s" % (`a`, `b`) -+ return "%s, %s" % (repr(a), repr(b)) - - class Item3(object): - """Required docstring for the publisher.""" - def __call__(self, *args): -- return u"..." -+ return "..." - - class View(object): - """Required docstring for the publisher.""" -@@ -115,7 +115,7 @@ class BrowserTests(HTTPTests): - - def index(self, a, b): - """Required docstring for the publisher.""" -- return u"%s, %s" % (`a`, `b`) -+ return "%s, %s" % (repr(a), repr(b)) - - class Item2(object): - """Required docstring for the publisher.""" -@@ -145,7 +145,7 @@ class BrowserTests(HTTPTests): - - def testTraversalToItem(self): - res = self._publisherResults() -- self.failUnlessEqual( -+ self.assertEqual( - res, - "Status: 200 Ok\r\n" - "Content-Length: 7\r\n" -@@ -159,7 +159,7 @@ class BrowserTests(HTTPTests): - request = self._createRequest() - response = request.response - publish(request) -- self.failIf(response.getBase()) -+ self.assertFalse(response.getBase()) - - def testDefault(self): - extra = {'PATH_INFO': '/folder/item2'} -@@ -183,7 +183,7 @@ class BrowserTests(HTTPTests): - should be catched""" - - extra = {'REQUEST_METHOD':'POST', -- 'PATH_INFO': u'/', -+ 'PATH_INFO': '/', - 'CONTENT_TYPE': 'multipart/form-data;\ - boundary=---------------------------1'} - -@@ -201,17 +201,17 @@ class BrowserTests(HTTPTests): - its filename.""" - - extra = {'REQUEST_METHOD':'POST', -- 'PATH_INFO': u'/', -+ 'PATH_INFO': '/', - 'CONTENT_TYPE': 'multipart/form-data;\ - boundary=---------------------------1'} - - request = self._createRequest(extra, body=LARGE_FILE_BODY) - request.processInputs() -- self.assert_(request.form['upload'].name) -+ self.assertTrue(request.form['upload'].name) - - request = self._createRequest(extra, body=IE_FILE_BODY) - request.processInputs() -- self.assertEquals(request.form['upload'].filename, 'notepad.exe') -+ self.assertEqual(request.form['upload'].filename, 'notepad.exe') - - - def testDefault2(self): -@@ -227,14 +227,14 @@ class BrowserTests(HTTPTests): - request = self._createRequest(extra) - response = request.response - publish(request) -- self.failIf(response.getBase()) -+ self.assertFalse(response.getBase()) - - def testDefault4(self): - extra = {'PATH_INFO': '/folder/item2/view/'} - request = self._createRequest(extra) - response = request.response - publish(request) -- self.failIf(response.getBase()) -+ self.assertFalse(response.getBase()) - - def testDefault6(self): - extra = {'PATH_INFO': '/folder/item2/'} -@@ -258,7 +258,7 @@ class BrowserTests(HTTPTests): - request = self._createRequest() - publish(request) - self.assertEqual(request.form, -- {u'a':u'5', u'b':6}) -+ {'a':'5', 'b':6}) - - def testFormNoEncodingUsesUTF8(self): - encoded = 'K\xc3\x83\xc2\xb6hlerstra\xc3\x83\xc2\x9fe' -@@ -271,8 +271,8 @@ class BrowserTests(HTTPTests): - # many mainstream browsers do not send HTTP_ACCEPT_CHARSET - del request._environ['HTTP_ACCEPT_CHARSET'] - publish(request) -- self.assert_(isinstance(request.form[u'street'], unicode)) -- self.assertEqual(unicode(encoded, 'utf-8'), request.form['street']) -+ self.assertTrue(isinstance(request.form['street'], str)) -+ self.assertEqual(str(encoded, 'utf-8'), request.form['street']) - - def testFormAcceptsStarButNotUTF8(self): - extra = { -@@ -287,100 +287,100 @@ class BrowserTests(HTTPTests): - extra = {'QUERY_STRING':'a:list=5&a:list=6&b=1'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':[u'5',u'6'], u'b':u'1'}) -+ self.assertEqual(request.form, {'a':['5','6'], 'b':'1'}) - - def testQueryStringIgnoredForPOST(self): - request = self._createRequest( - {"REQUEST_METHOD": "POST", - 'PATH_INFO': '/folder/item3'}, body='c=5&d:int=6') - publish(request) -- self.assertEqual(request.form, {u'c': u'5', u'd': 6}) -+ self.assertEqual(request.form, {'c': '5', 'd': 6}) - self.assertEqual(request.get('QUERY_STRING'), 'a=5&b:int=6') - - def testFormTupleTypes(self): - extra = {'QUERY_STRING':'a:tuple=5&a:tuple=6&b=1'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':(u'5',u'6'), u'b':u'1'}) -+ self.assertEqual(request.form, {'a':('5','6'), 'b':'1'}) - - def testFormTupleRecordTypes(self): - extra = {'QUERY_STRING':'a.x:tuple:record=5&a.x:tuple:record=6&b=1'} - request = self._createRequest(extra) - publish(request) -- keys = request.form.keys() -+ keys = list(request.form.keys()) - keys.sort() -- self.assertEqual(keys, [u'a',u'b']) -- self.assertEqual(request.form[u'b'], u'1') -- self.assertEqual(request.form[u'a'].keys(), [u'x']) -- self.assertEqual(request.form[u'a'][u'x'], (u'5',u'6')) -- self.assertEqual(request.form[u'a'].x, (u'5',u'6')) -- self.assertEqual(str(request.form[u'a']), "{x: (u'5', u'6')}") -- self.assertEqual(repr(request.form[u'a']), "{x: (u'5', u'6')}") -+ self.assertEqual(keys, ['a','b']) -+ self.assertEqual(request.form['b'], '1') -+ self.assertEqual(list(request.form['a'].keys()), ['x']) -+ self.assertEqual(request.form['a']['x'], ('5','6')) -+ self.assertEqual(request.form['a'].x, ('5','6')) -+ self.assertEqual(str(request.form['a']), "{x: (u'5', u'6')}") -+ self.assertEqual(repr(request.form['a']), "{x: (u'5', u'6')}") - - def testFormRecordsTypes(self): - extra = {'QUERY_STRING':'a.x:records=5&a.x:records=6&b=1'} - request = self._createRequest(extra) - publish(request) -- keys = request.form.keys() -+ keys = list(request.form.keys()) - keys.sort() -- self.assertEqual(keys, [u'a',u'b']) -- self.assertEqual(request.form[u'b'], u'1') -- self.assertEqual(len(request.form[u'a']), 2) -- self.assertEqual(request.form[u'a'][0][u'x'], u'5') -- self.assertEqual(request.form[u'a'][0].x, u'5') -- self.assertEqual(request.form[u'a'][1][u'x'], u'6') -- self.assertEqual(request.form[u'a'][1].x, u'6') -- self.assertEqual(str(request.form[u'a']), "[{x: u'5'}, {x: u'6'}]") -- self.assertEqual(repr(request.form[u'a']), "[{x: u'5'}, {x: u'6'}]") -+ self.assertEqual(keys, ['a','b']) -+ self.assertEqual(request.form['b'], '1') -+ self.assertEqual(len(request.form['a']), 2) -+ self.assertEqual(request.form['a'][0]['x'], '5') -+ self.assertEqual(request.form['a'][0].x, '5') -+ self.assertEqual(request.form['a'][1]['x'], '6') -+ self.assertEqual(request.form['a'][1].x, '6') -+ self.assertEqual(str(request.form['a']), "[{x: u'5'}, {x: u'6'}]") -+ self.assertEqual(repr(request.form['a']), "[{x: u'5'}, {x: u'6'}]") - - def testFormMultipleRecordsTypes(self): - extra = {'QUERY_STRING':'a.x:records:int=5&a.y:records:int=51' - '&a.x:records:int=6&a.y:records:int=61&b=1'} - request = self._createRequest(extra) - publish(request) -- keys = request.form.keys() -+ keys = list(request.form.keys()) - keys.sort() -- self.assertEqual(keys, [u'a',u'b']) -- self.assertEqual(request.form[u'b'], u'1') -- self.assertEqual(len(request.form[u'a']), 2) -- self.assertEqual(request.form[u'a'][0][u'x'], 5) -- self.assertEqual(request.form[u'a'][0].x, 5) -- self.assertEqual(request.form[u'a'][0][u'y'], 51) -- self.assertEqual(request.form[u'a'][0].y, 51) -- self.assertEqual(request.form[u'a'][1][u'x'], 6) -- self.assertEqual(request.form[u'a'][1].x, 6) -- self.assertEqual(request.form[u'a'][1][u'y'], 61) -- self.assertEqual(request.form[u'a'][1].y, 61) -- self.assertEqual(str(request.form[u'a']), -+ self.assertEqual(keys, ['a','b']) -+ self.assertEqual(request.form['b'], '1') -+ self.assertEqual(len(request.form['a']), 2) -+ self.assertEqual(request.form['a'][0]['x'], 5) -+ self.assertEqual(request.form['a'][0].x, 5) -+ self.assertEqual(request.form['a'][0]['y'], 51) -+ self.assertEqual(request.form['a'][0].y, 51) -+ self.assertEqual(request.form['a'][1]['x'], 6) -+ self.assertEqual(request.form['a'][1].x, 6) -+ self.assertEqual(request.form['a'][1]['y'], 61) -+ self.assertEqual(request.form['a'][1].y, 61) -+ self.assertEqual(str(request.form['a']), - "[{x: 5, y: 51}, {x: 6, y: 61}]") -- self.assertEqual(repr(request.form[u'a']), -+ self.assertEqual(repr(request.form['a']), - "[{x: 5, y: 51}, {x: 6, y: 61}]") - - def testFormListRecordTypes(self): - extra = {'QUERY_STRING':'a.x:list:record=5&a.x:list:record=6&b=1'} - request = self._createRequest(extra) - publish(request) -- keys = request.form.keys() -+ keys = list(request.form.keys()) - keys.sort() -- self.assertEqual(keys, [u'a',u'b']) -- self.assertEqual(request.form[u'b'], u'1') -- self.assertEqual(request.form[u'a'].keys(), [u'x']) -- self.assertEqual(request.form[u'a'][u'x'], [u'5',u'6']) -- self.assertEqual(request.form[u'a'].x, [u'5',u'6']) -- self.assertEqual(str(request.form[u'a']), "{x: [u'5', u'6']}") -- self.assertEqual(repr(request.form[u'a']), "{x: [u'5', u'6']}") -+ self.assertEqual(keys, ['a','b']) -+ self.assertEqual(request.form['b'], '1') -+ self.assertEqual(list(request.form['a'].keys()), ['x']) -+ self.assertEqual(request.form['a']['x'], ['5','6']) -+ self.assertEqual(request.form['a'].x, ['5','6']) -+ self.assertEqual(str(request.form['a']), "{x: [u'5', u'6']}") -+ self.assertEqual(repr(request.form['a']), "{x: [u'5', u'6']}") - - def testFormListTypes2(self): - extra = {'QUERY_STRING':'a=5&a=6&b=1'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':[u'5',u'6'], u'b':u'1'}) -+ self.assertEqual(request.form, {'a':['5','6'], 'b':'1'}) - - def testFormIntTypes(self): - extra = {'QUERY_STRING':'a:int=5&b:int=-5&c:int=0&d:int=-0'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': 5, u'b': -5, u'c': 0, u'd': 0}) -+ self.assertEqual(request.form, {'a': 5, 'b': -5, 'c': 0, 'd': 0}) - - extra = {'QUERY_STRING':'a:int='} - request = self._createRequest(extra) -@@ -394,7 +394,7 @@ class BrowserTests(HTTPTests): - extra = {'QUERY_STRING':'a:float=5&b:float=-5.01&c:float=0'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': 5.0, u'b': -5.01, u'c': 0.0}) -+ self.assertEqual(request.form, {'a': 5.0, 'b': -5.01, 'c': 0.0}) - - extra = {'QUERY_STRING':'a:float='} - request = self._createRequest(extra) -@@ -408,7 +408,7 @@ class BrowserTests(HTTPTests): - extra = {'QUERY_STRING':'a:long=99999999999999&b:long=0L'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': 99999999999999, u'b': 0}) -+ self.assertEqual(request.form, {'a': 99999999999999, 'b': 0}) - - extra = {'QUERY_STRING':'a:long='} - request = self._createRequest(extra) -@@ -422,27 +422,27 @@ class BrowserTests(HTTPTests): - extra = {'QUERY_STRING':'a:tokens=a%20b%20c%20d&b:tokens='} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': [u'a', u'b', u'c', u'd'], -- u'b': []}) -+ self.assertEqual(request.form, {'a': ['a', 'b', 'c', 'd'], -+ 'b': []}) - - def testFormStringTypes(self): - extra = {'QUERY_STRING':'a:string=test&b:string='} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': u'test', u'b': u''}) -+ self.assertEqual(request.form, {'a': 'test', 'b': ''}) - - def testFormLinesTypes(self): - extra = {'QUERY_STRING':'a:lines=a%0ab%0ac%0ad&b:lines='} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': [u'a', u'b', u'c', u'd'], -- u'b': []}) -+ self.assertEqual(request.form, {'a': ['a', 'b', 'c', 'd'], -+ 'b': []}) - - def testFormTextTypes(self): - extra = {'QUERY_STRING':'a:text=a%0a%0db%0d%0ac%0dd%0ae&b:text='} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': u'a\nb\nc\nd\ne', u'b': u''}) -+ self.assertEqual(request.form, {'a': 'a\nb\nc\nd\ne', 'b': ''}) - - def testFormRequiredTypes(self): - extra = {'QUERY_STRING':'a:required=%20'} -@@ -453,33 +453,33 @@ class BrowserTests(HTTPTests): - extra = {'QUERY_STRING':'a:boolean=&b:boolean=1&c:boolean=%20'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a': False, u'b': True, u'c': True}) -+ self.assertEqual(request.form, {'a': False, 'b': True, 'c': True}) - - def testFormDefaults(self): - extra = {'QUERY_STRING':'a:default=10&a=6&b=1'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':u'6', u'b':u'1'}) -+ self.assertEqual(request.form, {'a':'6', 'b':'1'}) - - def testFormDefaults2(self): - extra = {'QUERY_STRING':'a:default=10&b=1'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':u'10', u'b':u'1'}) -+ self.assertEqual(request.form, {'a':'10', 'b':'1'}) - - def testFormFieldName(self): - extra = {'QUERY_STRING':'c+%2B%2F%3D%26c%3Aint=6', - 'PATH_INFO': '/folder/item3/'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'c +/=&c': 6}) -+ self.assertEqual(request.form, {'c +/=&c': 6}) - - def testFormFieldValue(self): - extra = {'QUERY_STRING':'a=b+%2B%2F%3D%26b%3Aint', - 'PATH_INFO': '/folder/item3/'} - request = self._createRequest(extra) - publish(request) -- self.assertEqual(request.form, {u'a':u'b +/=&b:int'}) -+ self.assertEqual(request.form, {'a':'b +/=&b:int'}) - - def testInterface(self): - request = self._createRequest() -@@ -506,7 +506,7 @@ class BrowserTests(HTTPTests): - request = self._createRequest(extra) - publish(request) - self.assertEqual(request.headers.get('HTTP_REFERER'), 'http://localhost/') -- self.assertEqual(request.form, {u'HTTP_REFERER': u'peter'}) -+ self.assertEqual(request.form, {'HTTP_REFERER': 'peter'}) - - - def test_post_body_not_consumed_unnecessarily(self): ---- src/zope/publisher/tests/test_http.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/tests/test_http.py -@@ -17,8 +17,8 @@ - import sys - import tempfile - import unittest --from cStringIO import StringIO --from Cookie import CookieError -+from io import StringIO -+from http.cookies import CookieError - from doctest import DocFileSuite - - import zope.event -@@ -128,19 +128,19 @@ class HTTPInputStreamTests(unittest.TestCase): - - # HTTPInputStream understands both CONTENT_LENGTH... - stream = HTTPInputStream(StringIO(data), {'CONTENT_LENGTH': '100000'}) -- self.assert_(isinstance(stream.getCacheStream(), TempFileType)) -+ self.assertTrue(isinstance(stream.getCacheStream(), TempFileType)) - - # ... and HTTP_CONTENT_LENGTH. - stream = HTTPInputStream(StringIO(data), {'HTTP_CONTENT_LENGTH': - '100000'}) -- self.assert_(isinstance(stream.getCacheStream(), TempFileType)) -+ self.assertTrue(isinstance(stream.getCacheStream(), TempFileType)) - - # If CONTENT_LENGTH is absent or empty, it takes the value - # given in HTTP_CONTENT_LENGTH: - stream = HTTPInputStream(StringIO(data), - {'CONTENT_LENGTH': '', - 'HTTP_CONTENT_LENGTH': '100000'}) -- self.assert_(isinstance(stream.getCacheStream(), TempFileType)) -+ self.assertTrue(isinstance(stream.getCacheStream(), TempFileType)) - - # In fact, HTTPInputStream can be instantiated with both an - # empty CONTENT_LENGTH and an empty HTTP_CONTENT_LENGTH: -@@ -165,7 +165,7 @@ class HTTPInputStreamTests(unittest.TestCase): - return 'a'*size - - stream = HTTPInputStream(NonClosingStream(), {'CONTENT_LENGTH': '10'}) -- self.assertEquals(stream.getCacheStream().read(), 'aaaaaaaaaa') -+ self.assertEqual(stream.getCacheStream().read(), 'aaaaaaaaaa') - stream = HTTPInputStream(NonClosingStream(), {}) - self.assertRaises(ServerHung, stream.getCacheStream) - -@@ -194,7 +194,7 @@ class HTTPTests(unittest.TestCase): - class Item(object): - """Required docstring for the publisher.""" - def __call__(self, a, b): -- return "%s, %s" % (`a`, `b`) -+ return "%s, %s" % (repr(a), repr(b)) - - self.app = AppRoot() - self.app.folder = Folder() -@@ -252,7 +252,7 @@ class HTTPTests(unittest.TestCase): - - def testTraversalToItem(self): - res = self._publisherResults() -- self.failUnlessEqual( -+ self.assertEqual( - res, - "Status: 200 Ok\r\n" - "Content-Length: 6\r\n" -@@ -266,27 +266,27 @@ class HTTPTests(unittest.TestCase): - - request = self._createRequest(env, '') - location = request.response.redirect('http://foobar.com/redirected') -- self.assertEquals(location, 'http://foobar.com/redirected') -- self.assertEquals(request.response.getStatus(), 302) -- self.assertEquals(request.response.getHeader('location'), location) -+ self.assertEqual(location, 'http://foobar.com/redirected') -+ self.assertEqual(request.response.getStatus(), 302) -+ self.assertEqual(request.response.getHeader('location'), location) - - # test HTTP/1.1 - env = {'SERVER_PROTOCOL':'HTTP/1.1'} - - request = self._createRequest(env, '') - location = request.response.redirect('http://foobar.com/redirected') -- self.assertEquals(request.response.getStatus(), 303) -+ self.assertEqual(request.response.getStatus(), 303) - - # test explicit status - request = self._createRequest(env, '') - request.response.redirect('http://foobar.com/explicit', 304) -- self.assertEquals(request.response.getStatus(), 304) -+ self.assertEqual(request.response.getStatus(), 304) - - # test non-string location, like URLGetter - request = self._createRequest(env, '') - request.response.redirect(request.URL) -- self.assertEquals(request.response.getStatus(), 303) -- self.assertEquals(request.response.getHeader('location'), -+ self.assertEqual(request.response.getStatus(), 303) -+ self.assertEqual(request.response.getHeader('location'), - str(request.URL)) - - def testUntrustedRedirect(self): -@@ -301,81 +301,81 @@ class HTTPTests(unittest.TestCase): - # host. They aren't really allowed per RFC but the response object - # supports them and people are probably using them. - location = request.response.redirect('/foo', trusted=False) -- self.assertEquals('/foo', location) -+ self.assertEqual('/foo', location) - - # If we pass `trusted` for the redirect, we can redirect the browser - # anywhere we want, though. - location = request.response.redirect( - 'http://my-friends.com', trusted=True) -- self.assertEquals('http://my-friends.com', location) -+ self.assertEqual('http://my-friends.com', location) - - # We can redirect to our own full server URL, with or without a port - # being specified. Let's explicitly set a host name to test this is - # this is how virtual hosting works: - request.setApplicationServer('example.com') - location = request.response.redirect('http://example.com') -- self.assertEquals('http://example.com', location) -+ self.assertEqual('http://example.com', location) - - request.setApplicationServer('example.com', port=8080) - location = request.response.redirect('http://example.com:8080') -- self.assertEquals('http://example.com:8080', location) -+ self.assertEqual('http://example.com:8080', location) - - # The default port for HTTP and HTTPS may be omitted: - request.setApplicationServer('example.com') - location = request.response.redirect('http://example.com:80') -- self.assertEquals('http://example.com:80', location) -+ self.assertEqual('http://example.com:80', location) - - request.setApplicationServer('example.com', port=80) - location = request.response.redirect('http://example.com') -- self.assertEquals('http://example.com', location) -+ self.assertEqual('http://example.com', location) - - request.setApplicationServer('example.com', 'https') - location = request.response.redirect('https://example.com:443') -- self.assertEquals('https://example.com:443', location) -+ self.assertEqual('https://example.com:443', location) - - request.setApplicationServer('example.com', 'https', 443) - location = request.response.redirect('https://example.com') -- self.assertEquals('https://example.com', location) -+ self.assertEqual('https://example.com', location) - - def testUnregisteredStatus(self): - # verify we can set the status to an unregistered int value - request = self._createRequest({}, '') - request.response.setStatus(289) -- self.assertEquals(request.response.getStatus(), 289) -+ self.assertEqual(request.response.getStatus(), 289) - - def testRequestEnvironment(self): - req = self._createRequest() - publish(req, handle_errors=0) # Force expansion of URL variables - -- self.assertEquals(str(req.URL), 'http://foobar.com/folder/item') -- self.assertEquals(req.URL['-1'], 'http://foobar.com/folder') -- self.assertEquals(req.URL['-2'], 'http://foobar.com') -+ self.assertEqual(str(req.URL), 'http://foobar.com/folder/item') -+ self.assertEqual(req.URL['-1'], 'http://foobar.com/folder') -+ self.assertEqual(req.URL['-2'], 'http://foobar.com') - self.assertRaises(KeyError, req.URL.__getitem__, '-3') - -- self.assertEquals(req.URL['0'], 'http://foobar.com') -- self.assertEquals(req.URL['1'], 'http://foobar.com/folder') -- self.assertEquals(req.URL['2'], 'http://foobar.com/folder/item') -+ self.assertEqual(req.URL['0'], 'http://foobar.com') -+ self.assertEqual(req.URL['1'], 'http://foobar.com/folder') -+ self.assertEqual(req.URL['2'], 'http://foobar.com/folder/item') - self.assertRaises(KeyError, req.URL.__getitem__, '3') - -- self.assertEquals(req.URL.get('0'), 'http://foobar.com') -- self.assertEquals(req.URL.get('1'), 'http://foobar.com/folder') -- self.assertEquals(req.URL.get('2'), 'http://foobar.com/folder/item') -- self.assertEquals(req.URL.get('3', 'none'), 'none') -+ self.assertEqual(req.URL.get('0'), 'http://foobar.com') -+ self.assertEqual(req.URL.get('1'), 'http://foobar.com/folder') -+ self.assertEqual(req.URL.get('2'), 'http://foobar.com/folder/item') -+ self.assertEqual(req.URL.get('3', 'none'), 'none') - -- self.assertEquals(req['SERVER_URL'], 'http://foobar.com') -- self.assertEquals(req['HTTP_HOST'], 'foobar.com') -- self.assertEquals(req['PATH_INFO'], '/folder/item') -- self.assertEquals(req['CONTENT_LENGTH'], '0') -+ self.assertEqual(req['SERVER_URL'], 'http://foobar.com') -+ self.assertEqual(req['HTTP_HOST'], 'foobar.com') -+ self.assertEqual(req['PATH_INFO'], '/folder/item') -+ self.assertEqual(req['CONTENT_LENGTH'], '0') - self.assertRaises(KeyError, req.__getitem__, 'HTTP_AUTHORIZATION') -- self.assertEquals(req['GATEWAY_INTERFACE'], 'TestFooInterface/1.0') -- self.assertEquals(req['HTTP_OFF_THE_WALL'], "Spam 'n eggs") -+ self.assertEqual(req['GATEWAY_INTERFACE'], 'TestFooInterface/1.0') -+ self.assertEqual(req['HTTP_OFF_THE_WALL'], "Spam 'n eggs") - - self.assertRaises(KeyError, req.__getitem__, - 'HTTP_WE_DID_NOT_PROVIDE_THIS') - - def testRequestLocale(self): - eq = self.assertEqual -- unless = self.failUnless -+ unless = self.assertTrue - - from zope.publisher.browser import BrowserLanguages - from zope.publisher.interfaces.http import IHTTPRequest -@@ -448,17 +448,17 @@ class HTTPTests(unittest.TestCase): - } - req = self._createRequest(extra_env=cookies) - -- self.assertEquals(req.cookies[u'foo'], u'bar') -- self.assertEquals(req[u'foo'], u'bar') -+ self.assertEqual(req.cookies['foo'], 'bar') -+ self.assertEqual(req['foo'], 'bar') - -- self.assertEquals(req.cookies[u'spam'], u'eggs') -- self.assertEquals(req[u'spam'], u'eggs') -+ self.assertEqual(req.cookies['spam'], 'eggs') -+ self.assertEqual(req['spam'], 'eggs') - -- self.assertEquals(req.cookies[u'this'], u'Should be accepted') -- self.assertEquals(req[u'this'], u'Should be accepted') -+ self.assertEqual(req.cookies['this'], 'Should be accepted') -+ self.assertEqual(req['this'], 'Should be accepted') - - # Reserved key -- self.failIf(req.cookies.has_key('path')) -+ self.assertFalse('path' in req.cookies) - - def testCookieErrorToLog(self): - cookies = { -@@ -467,23 +467,23 @@ class HTTPTests(unittest.TestCase): - } - req = self._createRequest(extra_env=cookies) - -- self.failIf(req.cookies.has_key('foo')) -- self.failIf(req.has_key('foo')) -+ self.assertFalse('foo' in req.cookies) -+ self.assertFalse('foo' in req) - -- self.failIf(req.cookies.has_key('spam')) -- self.failIf(req.has_key('spam')) -+ self.assertFalse('spam' in req.cookies) -+ self.assertFalse('spam' in req) - -- self.failIf(req.cookies.has_key('ldap/OU')) -- self.failIf(req.has_key('ldap/OU')) -+ self.assertFalse('ldap/OU' in req.cookies) -+ self.assertFalse('ldap/OU' in req) - - # Reserved key -- self.failIf(req.cookies.has_key('path')) -+ self.assertFalse('path' in req.cookies) - - def testCookiesUnicode(self): - # Cookie values are assumed to be UTF-8 encoded - cookies = {'HTTP_COOKIE': r'key="\342\230\243";'} - req = self._createRequest(extra_env=cookies) -- self.assertEquals(req.cookies[u'key'], u'\N{BIOHAZARD SIGN}') -+ self.assertEqual(req.cookies['key'], '\N{BIOHAZARD SIGN}') - - def testHeaders(self): - headers = { -@@ -491,13 +491,13 @@ class HTTPTests(unittest.TestCase): - 'Another-Test': 'another', - } - req = self._createRequest(extra_env=headers) -- self.assertEquals(req.headers[u'TEST_HEADER'], u'test') -- self.assertEquals(req.headers[u'TEST-HEADER'], u'test') -- self.assertEquals(req.headers[u'test_header'], u'test') -- self.assertEquals(req.getHeader('TEST_HEADER', literal=True), u'test') -- self.assertEquals(req.getHeader('TEST-HEADER', literal=True), None) -- self.assertEquals(req.getHeader('test_header', literal=True), None) -- self.assertEquals(req.getHeader('Another-Test', literal=True), -+ self.assertEqual(req.headers['TEST_HEADER'], 'test') -+ self.assertEqual(req.headers['TEST-HEADER'], 'test') -+ self.assertEqual(req.headers['test_header'], 'test') -+ self.assertEqual(req.getHeader('TEST_HEADER', literal=True), 'test') -+ self.assertEqual(req.getHeader('TEST-HEADER', literal=True), None) -+ self.assertEqual(req.getHeader('test_header', literal=True), None) -+ self.assertEqual(req.getHeader('Another-Test', literal=True), - 'another') - - def testBasicAuth(self): -@@ -505,19 +505,19 @@ class HTTPTests(unittest.TestCase): - req = self._createRequest() - verifyObject(IHTTPCredentials, req) - lpq = req._authUserPW() -- self.assertEquals(lpq, None) -+ self.assertEqual(lpq, None) - env = {} - login, password = ("tim", "123:456") - s = ("%s:%s" % (login, password)).encode("base64").rstrip() - env['HTTP_AUTHORIZATION'] = "Basic %s" % s - req = self._createRequest(env) - lpw = req._authUserPW() -- self.assertEquals(lpw, (login, password)) -+ self.assertEqual(lpw, (login, password)) - - def testSetPrincipal(self): - req = self._createRequest() - req.setPrincipal(UserStub("jim")) -- self.assertEquals(req.response.authUser, 'jim') -+ self.assertEqual(req.response.authUser, 'jim') - - def test_method(self): - r = self._createRequest(extra_env={'REQUEST_METHOD':'SPAM'}) -@@ -530,25 +530,25 @@ class HTTPTests(unittest.TestCase): - zope.event.subscribers.append(events.append) - req = self._createRequest() - req.setApplicationServer('foo') -- self.assertEquals(req._app_server, 'http://foo') -+ self.assertEqual(req._app_server, 'http://foo') - req.setApplicationServer('foo', proto='https') -- self.assertEquals(req._app_server, 'https://foo') -+ self.assertEqual(req._app_server, 'https://foo') - req.setApplicationServer('foo', proto='https', port=8080) -- self.assertEquals(req._app_server, 'https://foo:8080') -+ self.assertEqual(req._app_server, 'https://foo:8080') - req.setApplicationServer('foo', proto='http', port='9673') -- self.assertEquals(req._app_server, 'http://foo:9673') -+ self.assertEqual(req._app_server, 'http://foo:9673') - req.setApplicationServer('foo', proto='https', port=443) -- self.assertEquals(req._app_server, 'https://foo') -+ self.assertEqual(req._app_server, 'https://foo') - req.setApplicationServer('foo', proto='https', port='443') -- self.assertEquals(req._app_server, 'https://foo') -+ self.assertEqual(req._app_server, 'https://foo') - req.setApplicationServer('foo', port=80) -- self.assertEquals(req._app_server, 'http://foo') -+ self.assertEqual(req._app_server, 'http://foo') - req.setApplicationServer('foo', proto='telnet', port=80) -- self.assertEquals(req._app_server, 'telnet://foo:80') -+ self.assertEqual(req._app_server, 'telnet://foo:80') - zope.event.subscribers.pop() -- self.assertEquals(len(events), 8) -+ self.assertEqual(len(events), 8) - for event in events: -- self.assertEquals(event.request, req) -+ self.assertEqual(event.request, req) - - def test_setApplicationNames(self): - events = [] -@@ -556,12 +556,12 @@ class HTTPTests(unittest.TestCase): - req = self._createRequest() - names = ['x', 'y', 'z'] - req.setVirtualHostRoot(names) -- self.assertEquals(req._app_names, ['x', 'y', 'z']) -+ self.assertEqual(req._app_names, ['x', 'y', 'z']) - names[0] = 'muahahahaha' -- self.assertEquals(req._app_names, ['x', 'y', 'z']) -+ self.assertEqual(req._app_names, ['x', 'y', 'z']) - zope.event.subscribers.pop() -- self.assertEquals(len(events), 1) -- self.assertEquals(events[0].request, req) -+ self.assertEqual(len(events), 1) -+ self.assertEqual(events[0].request, req) - - def test_setVirtualHostRoot(self): - events = [] -@@ -570,22 +570,22 @@ class HTTPTests(unittest.TestCase): - req._traversed_names = ['x', 'y'] - req._last_obj_traversed = object() - req.setVirtualHostRoot() -- self.failIf(req._traversed_names) -- self.assertEquals(req._vh_root, req._last_obj_traversed) -+ self.assertFalse(req._traversed_names) -+ self.assertEqual(req._vh_root, req._last_obj_traversed) - zope.event.subscribers.pop() -- self.assertEquals(len(events), 1) -- self.assertEquals(events[0].request, req) -+ self.assertEqual(len(events), 1) -+ self.assertEqual(events[0].request, req) - - def test_getVirtualHostRoot(self): - req = self._createRequest() -- self.assertEquals(req.getVirtualHostRoot(), None) -+ self.assertEqual(req.getVirtualHostRoot(), None) - req._vh_root = object() -- self.assertEquals(req.getVirtualHostRoot(), req._vh_root) -+ self.assertEqual(req.getVirtualHostRoot(), req._vh_root) - - def test_traverse(self): - req = self._createRequest() - req.traverse(self.app) -- self.assertEquals(req._traversed_names, ['folder', 'item']) -+ self.assertEqual(req._traversed_names, ['folder', 'item']) - - # setting it during traversal matters - req = self._createRequest() -@@ -594,8 +594,8 @@ class HTTPTests(unittest.TestCase): - req.setVirtualHostRoot() - req.publication.callTraversalHooks = hook - req.traverse(self.app) -- self.assertEquals(req._traversed_names, ['item']) -- self.assertEquals(req._vh_root, self.app.folder) -+ self.assertEqual(req._traversed_names, ['item']) -+ self.assertEqual(req._vh_root, self.app.folder) - - def test_traverseDuplicateHooks(self): - """ -@@ -620,7 +620,7 @@ class HTTPTests(unittest.TestCase): - req.setPublication(publication) - req.setTraversalStack(req.getTraversalStack() + ["vh"]) - req.traverse(self.app) -- self.assertEquals(len(hooks), 3) -+ self.assertEqual(len(hooks), 3) - - def testInterface(self): - from zope.publisher.interfaces.http import IHTTPCredentials -@@ -634,31 +634,31 @@ class HTTPTests(unittest.TestCase): - req = self._createRequest() - deduceServerURL = req._HTTPRequest__deduceServerURL - req._environ = {'HTTP_HOST': 'example.com:80'} -- self.assertEquals(deduceServerURL(), 'http://example.com') -+ self.assertEqual(deduceServerURL(), 'http://example.com') - req._environ = {'HTTP_HOST': 'example.com:8080'} -- self.assertEquals(deduceServerURL(), 'http://example.com:8080') -+ self.assertEqual(deduceServerURL(), 'http://example.com:8080') - req._environ = {'HTTP_HOST': 'example.com:443', 'HTTPS': 'on'} -- self.assertEquals(deduceServerURL(), 'https://example.com') -+ self.assertEqual(deduceServerURL(), 'https://example.com') - req._environ = {'HTTP_HOST': 'example.com:80', 'HTTPS': 'ON'} -- self.assertEquals(deduceServerURL(), 'https://example.com:80') -+ self.assertEqual(deduceServerURL(), 'https://example.com:80') - req._environ = {'HTTP_HOST': 'example.com:8080', - 'SERVER_PORT_SECURE': '1'} -- self.assertEquals(deduceServerURL(), 'https://example.com:8080') -+ self.assertEqual(deduceServerURL(), 'https://example.com:8080') - req._environ = {'SERVER_NAME': 'example.com', 'SERVER_PORT':'8080', - 'SERVER_PORT_SECURE': '0'} -- self.assertEquals(deduceServerURL(), 'http://example.com:8080') -+ self.assertEqual(deduceServerURL(), 'http://example.com:8080') - req._environ = {'SERVER_NAME': 'example.com'} -- self.assertEquals(deduceServerURL(), 'http://example.com') -+ self.assertEqual(deduceServerURL(), 'http://example.com') - - def testUnicodeURLs(self): - # The request expects PATH_INFO to be utf-8 encoded when it gets it. - req = self._createRequest( - {'PATH_INFO': '/\xc3\xa4\xc3\xb6/\xc3\xbc\xc3\x9f/foo/bar.html'}) - self.assertEqual(req._traversal_stack, -- [u'bar.html', u'foo', u'\u00fc\u00df', u'\u00e4\u00f6']) -+ ['bar.html', 'foo', '\u00fc\u00df', '\u00e4\u00f6']) - # the request should have converted PATH_INFO to unicode - self.assertEqual(req['PATH_INFO'], -- u'/\u00e4\u00f6/\u00fc\u00df/foo/bar.html') -+ '/\u00e4\u00f6/\u00fc\u00df/foo/bar.html') - - def testResponseWriteFaile(self): - self.assertRaises(TypeError, -@@ -673,7 +673,7 @@ class HTTPTests(unittest.TestCase): - def test_unacceptable_charset(self): - # Regression test for https://bugs.launchpad.net/zope3/+bug/98337 - request = self._createRequest({'HTTP_ACCEPT_CHARSET': 'ISO-8859-1'}) -- result = u"Latin a with ogonek\u0105 Cyrillic ya \u044f" -+ result = "Latin a with ogonek\u0105 Cyrillic ya \u044f" - provideAdapter(HTTPCharsets) - request.response.setHeader('Content-Type', 'text/plain') - -@@ -682,10 +682,10 @@ class HTTPTests(unittest.TestCase): - request.response.setResult(result) - - body = request.response.consumeBody() -- self.assertEquals(request.response.getStatus(), 200) -- self.assertEquals(request.response.getHeader('Content-Type'), -+ self.assertEqual(request.response.getStatus(), 200) -+ self.assertEqual(request.response.getHeader('Content-Type'), - 'text/plain;charset=utf-8') -- self.assertEquals(body, -+ self.assertEqual(body, - 'Latin a with ogonek\xc4\x85 Cyrillic ya \xd1\x8f') - - class ConcreteHTTPTests(HTTPTests): -@@ -704,7 +704,7 @@ class ConcreteHTTPTests(HTTPTests): - r = self._createRequest(extra_env={"PATH_INFO": "/xxx"}) - publish(r, handle_errors=0) - r.shiftNameToApplication() -- self.assertEquals(r.getApplicationURL(), appurl+"/xxx") -+ self.assertEqual(r.getApplicationURL(), appurl+"/xxx") - - # Verify that we can only shift if we've traversed only a single name - r = self._createRequest(extra_env={"PATH_INFO": "/folder/item"}) -@@ -732,7 +732,7 @@ class TestHTTPResponse(unittest.TestCase): - response = self._createResponse() - assert(charset == 'utf-8') - if headers is not None: -- for hdr, val in headers.iteritems(): -+ for hdr, val in headers.items(): - response.setHeader(hdr, val) - response.setResult(body) - return self._parseResult(response) -@@ -755,10 +755,10 @@ class TestHTTPResponse(unittest.TestCase): - self.assertEqual(body, data) - - # Make sure that no Content-Length header was added -- self.assert_('Content-Length' not in headers) -+ self.assertTrue('Content-Length' not in headers) - - def testContentLength(self): -- eq = self.failUnlessEqual -+ eq = self.assertEqual - - headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "text/plain"}) -@@ -766,29 +766,29 @@ class TestHTTPResponse(unittest.TestCase): - eq("test", body) - - headers, body = self._getResultFromResponse( -- u'\u0442\u0435\u0441\u0442', "utf-8", -+ '\u0442\u0435\u0441\u0442', "utf-8", - {"content-type": "text/plain"}) - eq("8", headers["Content-Length"]) - eq('\xd1\x82\xd0\xb5\xd1\x81\xd1\x82', body) - - def testContentType(self): -- eq = self.failUnlessEqual -+ eq = self.assertEqual - - headers, body = self._getResultFromResponse("test", "utf-8") - eq("", headers.get("Content-Type", "")) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", -+ headers, body = self._getResultFromResponse("test", - headers={"content-type": "text/plain"}) - eq("text/plain;charset=utf-8", headers["Content-Type"]) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "text/html"}) - eq("text/html;charset=utf-8", headers["Content-Type"]) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "text/plain;charset=cp1251"}) - eq("text/plain;charset=cp1251", headers["Content-Type"]) - eq("test", body) -@@ -796,30 +796,30 @@ class TestHTTPResponse(unittest.TestCase): - # see https://bugs.launchpad.net/zope.publisher/+bug/98395 - # RFC 3023 types and */*+xml output as unicode - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "text/xml"}) - eq("text/xml;charset=utf-8", headers["Content-Type"]) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "application/xml"}) - eq("application/xml;charset=utf-8", headers["Content-Type"]) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "text/xml-external-parsed-entity"}) - eq("text/xml-external-parsed-entity;charset=utf-8", - headers["Content-Type"]) - eq("test", body) - -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "application/xml-external-parsed-entity"}) - eq("application/xml-external-parsed-entity;charset=utf-8", - headers["Content-Type"]) - eq("test", body) - - # Mozilla XUL -- headers, body = self._getResultFromResponse(u"test", "utf-8", -+ headers, body = self._getResultFromResponse("test", "utf-8", - {"content-type": "application/vnd+xml"}) - eq("application/vnd+xml;charset=utf-8", headers["Content-Type"]) - eq("test", body) -@@ -846,20 +846,20 @@ class TestHTTPResponse(unittest.TestCase): - c = self._getCookieFromResponse([ - ('foo', 'bar', {}), - ]) -- self.failUnless('foo=bar;' in c or 'foo=bar' in c, -+ self.assertTrue('foo=bar;' in c or 'foo=bar' in c, - 'foo=bar; not in %r' % c) - - c = self._getCookieFromResponse([ - ('foo', 'bar', {}), - ('alpha', 'beta', {}), - ]) -- self.failUnless('foo=bar;' in c or 'foo=bar' in c) -- self.failUnless('alpha=beta;' in c or 'alpha=beta' in c) -+ self.assertTrue('foo=bar;' in c or 'foo=bar' in c) -+ self.assertTrue('alpha=beta;' in c or 'alpha=beta' in c) - - c = self._getCookieFromResponse([ -- ('sign', u'\N{BIOHAZARD SIGN}', {}), -+ ('sign', '\N{BIOHAZARD SIGN}', {}), - ]) -- self.failUnless((r'sign="\342\230\243";' in c) or -+ self.assertTrue((r'sign="\342\230\243";' in c) or - (r'sign="\342\230\243"' in c)) - - self.assertRaises( -@@ -874,21 +874,21 @@ class TestHTTPResponse(unittest.TestCase): - 'domain': 'example.com', - 'pAth': '/froboz', - 'max_age': 3600, -- 'comment': u'blah;\N{BIOHAZARD SIGN}?', -+ 'comment': 'blah;\N{BIOHAZARD SIGN}?', - 'seCure': True, - }), - ])[0] -- self.failUnless('foo=bar;' in c or 'foo=bar' in c) -- self.failUnless('expires=Sat, 12 Jul 2014 23:26:28 GMT;' in c, repr(c)) -- self.failUnless('Domain=example.com;' in c) -- self.failUnless('Path=/froboz;' in c) -- self.failUnless('Max-Age=3600;' in c) -- self.failUnless('Comment=blah%3B%E2%98%A3?;' in c, repr(c)) -- self.failUnless('secure;' in c or 'secure' in c) -+ self.assertTrue('foo=bar;' in c or 'foo=bar' in c) -+ self.assertTrue('expires=Sat, 12 Jul 2014 23:26:28 GMT;' in c, repr(c)) -+ self.assertTrue('Domain=example.com;' in c) -+ self.assertTrue('Path=/froboz;' in c) -+ self.assertTrue('Max-Age=3600;' in c) -+ self.assertTrue('Comment=blah%3B%E2%98%A3?;' in c, repr(c)) -+ self.assertTrue('secure;' in c or 'secure' in c) - - c = self._getCookieFromResponse([('foo', 'bar', {'secure': False})])[0] -- self.failUnless('foo=bar;' in c or 'foo=bar' in c) -- self.failIf('secure' in c) -+ self.assertTrue('foo=bar;' in c or 'foo=bar' in c) -+ self.assertFalse('secure' in c) - - def test_handleException(self): - response = HTTPResponse() -@@ -898,10 +898,10 @@ class TestHTTPResponse(unittest.TestCase): - exc_info = sys.exc_info() - - response.handleException(exc_info) -- self.assertEquals(response.getHeader("content-type"), -+ self.assertEqual(response.getHeader("content-type"), - "text/html;charset=utf-8") -- self.assertEquals(response.getStatus(), 500) -- self.assert_(response.consumeBody() in -+ self.assertEqual(response.getStatus(), 500) -+ self.assertTrue(response.consumeBody() in - ["<html><head>" - "<title><type 'exceptions.ValueError'></title></head>\n" - "<body><h2><type 'exceptions.ValueError'></h2>\n" ---- src/zope/publisher/tests/test_xmlrpcrequest.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/tests/test_xmlrpcrequest.py -@@ -14,7 +14,7 @@ - """XML-RPC Request Tests - """ - import unittest --from StringIO import StringIO -+from io import StringIO - - from zope.publisher.base import DefaultPublication - from zope.publisher.http import HTTPCharsets -@@ -39,7 +39,7 @@ class TestXMLRPCRequest(XMLRPCRequest, HTTPCharsets): - XMLRPCRequest.__init__(self, *args, **kw) - - --xmlrpc_call = u'''<?xml version='1.0'?> -+xmlrpc_call = '''<?xml version='1.0'?> - <methodCall> - <methodName>action</methodName> - <params> -@@ -81,7 +81,7 @@ class XMLRPCTests(unittest.TestCase): - class Item(object): - - def __call__(self, a, b): -- return "%s, %s" % (`a`, `b`) -+ return "%s, %s" % (repr(a), repr(b)) - - def doit(self, a, b): - return 'do something %s %s' % (a, b) -@@ -90,7 +90,7 @@ class XMLRPCTests(unittest.TestCase): - - def action(self, a): - return "Parameter[type: %s; value: %s" %( -- type(a).__name__, `a`) -+ type(a).__name__, repr(a)) - - class Item2(object): - view = View() -@@ -118,15 +118,15 @@ class XMLRPCTests(unittest.TestCase): - def testProcessInput(self): - req = self._createRequest({}, xmlrpc_call) - req.processInputs() -- self.failUnlessEqual(req.getPositionalArguments(), (1,)) -- self.failUnlessEqual(tuple(req._path_suffix), ('action',)) -+ self.assertEqual(req.getPositionalArguments(), (1,)) -+ self.assertEqual(tuple(req._path_suffix), ('action',)) - - - def testTraversal(self): - req = self._createRequest({}, xmlrpc_call) - req.processInputs() - action = req.traverse(self.app) -- self.failUnlessEqual(action(*req.getPositionalArguments()), -+ self.assertEqual(action(*req.getPositionalArguments()), - "Parameter[type: int; value: 1") - - ---- src/zope/publisher/xmlrpc.py.orig 2012-07-02 06:19:44 UTC -+++ src/zope/publisher/xmlrpc.py -@@ -18,9 +18,9 @@ This module contains the XMLRPCRequest and XMLRPCRespo - __docformat__ = 'restructuredtext' - - import sys --import xmlrpclib -+import xmlrpc.client - import datetime --from StringIO import StringIO -+from io import StringIO - - import zope.component - import zope.interface -@@ -53,7 +53,7 @@ class XMLRPCRequest(HTTPRequest): - if not line: - break - lines += line -- self._args, function = xmlrpclib.loads(lines) -+ self._args, function = xmlrpc.client.loads(lines) - - # Translate '.' to '/' in function to represent object traversal. - function = function.split('.') -@@ -102,15 +102,15 @@ class XMLRPCResponse(HTTPResponse): - message instead of a generic HTML page. - """ - body = premarshal(result) -- if isinstance(body, xmlrpclib.Fault): -+ if isinstance(body, xmlrpc.client.Fault): - # Convert Fault object to XML-RPC response. -- body = xmlrpclib.dumps(body, methodresponse=True) -+ body = xmlrpc.client.dumps(body, methodresponse=True) - else: - # Marshall our body as an XML-RPC response. Strings will be sent - # as strings, integers as integers, etc. We do *not* convert - # everything to a string first. - try: -- body = xmlrpclib.dumps((body,), methodresponse=True, -+ body = xmlrpc.client.dumps((body,), methodresponse=True, - allow_none=True) - except: - # We really want to catch all exceptions at this point! -@@ -148,7 +148,7 @@ class XMLRPCResponse(HTTPResponse): - # Create an appropriate Fault object. Unfortunately, we throw away - # most of the debugging information. More useful error reporting is - # left as an exercise for the reader. -- Fault = xmlrpclib.Fault -+ Fault = xmlrpc.client.Fault - fault_text = None - try: - if isinstance(value, Fault): -@@ -183,7 +183,7 @@ class PreMarshallerBase(object): - self.data = data - - def __call__(self): -- raise Exception, "Not implemented" -+ raise Exception("Not implemented") - - class DictPreMarshaller(PreMarshallerBase): - """Pre-marshaller for dicts""" -@@ -191,48 +191,48 @@ class DictPreMarshaller(PreMarshallerBase): - - def __call__(self): - return dict([(premarshal(k), premarshal(v)) -- for (k, v) in self.data.items()]) -+ for (k, v) in list(self.data.items())]) - - class ListPreMarshaller(PreMarshallerBase): - """Pre-marshaller for list""" - zope.component.adapts(list) - - def __call__(self): -- return map(premarshal, self.data) -+ return list(map(premarshal, self.data)) - - class TuplePreMarshaller(ListPreMarshaller): - zope.component.adapts(tuple) - - class BinaryPreMarshaller(PreMarshallerBase): - """Pre-marshaller for xmlrpc.Binary""" -- zope.component.adapts(xmlrpclib.Binary) -+ zope.component.adapts(xmlrpc.client.Binary) - - def __call__(self): -- return xmlrpclib.Binary(self.data.data) -+ return xmlrpc.client.Binary(self.data.data) - - class FaultPreMarshaller(PreMarshallerBase): - """Pre-marshaller for xmlrpc.Fault""" -- zope.component.adapts(xmlrpclib.Fault) -+ zope.component.adapts(xmlrpc.client.Fault) - - def __call__(self): -- return xmlrpclib.Fault( -+ return xmlrpc.client.Fault( - premarshal(self.data.faultCode), - premarshal(self.data.faultString), - ) - - class DateTimePreMarshaller(PreMarshallerBase): - """Pre-marshaller for xmlrpc.DateTime""" -- zope.component.adapts(xmlrpclib.DateTime) -+ zope.component.adapts(xmlrpc.client.DateTime) - - def __call__(self): -- return xmlrpclib.DateTime(self.data.value) -+ return xmlrpc.client.DateTime(self.data.value) - - class PythonDateTimePreMarshaller(PreMarshallerBase): - """Pre-marshaller for datetime.datetime""" - zope.component.adapts(datetime.datetime) - - def __call__(self): -- return xmlrpclib.DateTime(self.data.isoformat()) -+ return xmlrpc.client.DateTime(self.data.isoformat()) - - def premarshal(data): - """Premarshal data before handing it to xmlrpclib for marhalling diff --git a/devel/py-zope.publisher/pkg-descr b/devel/py-zope.publisher/pkg-descr deleted file mode 100644 index 3b618cdd2bcf..000000000000 --- a/devel/py-zope.publisher/pkg-descr +++ /dev/null @@ -1,6 +0,0 @@ -zope.publisher allows you to publish Python objects on the web. -It has support for plain HTTP/WebDAV clients, web browsers as -well as XML-RPC and FTP clients. Input and output streams are -represented by request and response objects which allow for easy -client interaction from Python. The behaviour of the publisher -is geared towards WSGI compatibility. diff --git a/devel/py-zope.testing/Makefile b/devel/py-zope.testing/Makefile deleted file mode 100644 index cc6a3dfee81c..000000000000 --- a/devel/py-zope.testing/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -PORTNAME= zope.testing -PORTVERSION= 4.1.0 -PORTREVISION= 1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Zope testing helpers -WWW= https://pypi.org/project/zope.testing/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.interface>=0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.exceptions>=0:devel/py-zope.exceptions@${PY_FLAVOR} - -USES= python -USE_PYTHON= distutils autoplist - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.testing/distinfo b/devel/py-zope.testing/distinfo deleted file mode 100644 index 6d2f287de779..000000000000 --- a/devel/py-zope.testing/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.testing-4.1.0.tar.gz) = 4df78e4db98dfbcf0119e34357343c0be143cbad1226afd23b27b763fc027a8d -SIZE (zope/zope.testing-4.1.0.tar.gz) = 50844 diff --git a/devel/py-zope.testing/files/patch-2to3 b/devel/py-zope.testing/files/patch-2to3 deleted file mode 100644 index e1525aa05650..000000000000 --- a/devel/py-zope.testing/files/patch-2to3 +++ /dev/null @@ -1,145 +0,0 @@ ---- setup.py.orig 2012-01-29 14:23:38 UTC -+++ setup.py -@@ -24,12 +24,6 @@ from setuptools import setup - import sys - if sys.version > '3': - extras = dict( -- use_2to3 = True, -- convert_2to3_doctests = ['src/zope/testing/doctest.txt', -- 'src/zope/testing/formparser.txt', -- 'src/zope/testing/module.txt', -- 'src/zope/testing/setupstack.txt', -- ], - dependency_links = ['.'], # Only until zope.interface 3.6 and zope.exception 3.6 has been released. - ) - else: ---- src/zope/testing/doctest/__init__.py.orig 2012-01-29 14:23:14 UTC -+++ src/zope/testing/doctest/__init__.py -@@ -84,7 +84,7 @@ if sys.version < '2.6.5': - If the string `s` is Unicode, it is encoded using the stdout - encoding and the `backslashreplace` error handler. - """ -- if isinstance(s, unicode): -+ if isinstance(s, str): - s = s.encode(doctest._encoding, 'backslashreplace') - # This regexp matches the start of non-blank lines: - return re.sub('(?m)^(?!$)', indent*' ', s) -@@ -216,7 +216,7 @@ doctest.DocTestCase.tearDown = _patched_tearDown - # Patch so you can set REPORT_ONLY_FIRST_FAILURE even if you have a DIFF flag - # on the test. - import sys --from StringIO import StringIO -+from io import StringIO - - def _patched_runTest(self): - test = self._dt_test ---- src/zope/testing/doctestunit.py.orig 2012-01-29 14:23:14 UTC -+++ src/zope/testing/doctestunit.py -@@ -22,8 +22,8 @@ warnings.warn('zope.testing.doctestunit is deprecated - 'the Python standard library doctest module', DeprecationWarning, - stacklevel=2) - --from doctest import DocFileSuite, DocTestSuite --from doctest import debug_src, debug -+from .doctest import DocFileSuite, DocTestSuite -+from .doctest import debug_src, debug - - def pprint(): - from pprint import PrettyPrinter ---- src/zope/testing/formparser.py.orig 2012-01-29 14:23:14 UTC -+++ src/zope/testing/formparser.py -@@ -11,8 +11,8 @@ the `zope.testbrowser` package. - """ - __docformat__ = "reStructuredText" - --import HTMLParser --import urlparse -+import html.parser -+import urllib.parse - - - def parse(data, base=None): -@@ -30,7 +30,7 @@ class FormParser(object): - def __init__(self, data, base=None): - self.data = data - self.base = base -- self._parser = HTMLParser.HTMLParser() -+ self._parser = html.parser.HTMLParser() - self._parser.handle_data = self._handle_data - self._parser.handle_endtag = self._handle_endtag - self._parser.handle_starttag = self._handle_starttag -@@ -80,7 +80,7 @@ class FormParser(object): - method = kwattr(d, "method", "get") - action = d.get("action", "").strip() or None - if self.base and action: -- action = urlparse.urljoin(self.base, action) -+ action = urllib.parse.urljoin(self.base, action) - enctype = kwattr(d, "enctype", "application/x-www-form-urlencoded") - self.current = Form(name, id, method, action, enctype) - self.forms.append(self.current) -@@ -91,7 +91,7 @@ class FormParser(object): - readonly = "readonly" in d - src = d.get("src", "").strip() or None - if self.base and src: -- src = urlparse.urljoin(self.base, src) -+ src = urllib.parse.urljoin(self.base, src) - value = d.get("value") - size = intattr(d, "size") - maxlength = intattr(d, "maxlength") -@@ -113,7 +113,7 @@ class FormParser(object): - elif tag == "base": - href = d.get("href", "").strip() - if href and self.base: -- href = urlparse.urljoin(self.base, href) -+ href = urllib.parse.urljoin(self.base, href) - self.base = href - elif tag == "select": - disabled = "disabled" in d ---- src/zope/testing/server.py.orig 2012-01-29 14:23:14 UTC -+++ src/zope/testing/server.py -@@ -22,9 +22,9 @@ in the browser, the username and password are optional - done with inspecting the application press Ctrl+C to continue with the - functional test. - """ --import urlparse -+import urllib.parse - import webbrowser --from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler -+from http.server import HTTPServer, BaseHTTPRequestHandler - import sys - - -@@ -78,10 +78,10 @@ def addPortToURL(url, port): - 'http://localhost:555/index.html' - - """ -- (scheme, netloc, url, query, fragment) = urlparse.urlsplit(url) -+ (scheme, netloc, url, query, fragment) = urllib.parse.urlsplit(url) - netloc = netloc.split(':')[0] - netloc = "%s:%s" % (netloc, port) -- url = urlparse.urlunsplit((scheme, netloc, url, query, fragment)) -+ url = urllib.parse.urlunsplit((scheme, netloc, url, query, fragment)) - return url - - -@@ -93,7 +93,7 @@ def startServer(http, url, user=None, password=None, p - httpd = HTTPServer(server_address, requestHandler) - # XXX we rely on browser being slower than our server - webbrowser.open(url) -- print >> sys.stderr, 'Starting HTTP server...' -+ print('Starting HTTP server...', file=sys.stderr) - httpd.serve_forever() - except KeyboardInterrupt: -- print >> sys.stderr, 'Stopped HTTP server.' -+ print('Stopped HTTP server.', file=sys.stderr) ---- src/zope/testing/tests.py.orig 2012-01-29 14:23:14 UTC -+++ src/zope/testing/tests.py -@@ -12,7 +12,7 @@ - """Tests for the testing framework. - """ - --import doctest -+from . import doctest - import sys - import re - import unittest diff --git a/devel/py-zope.testing/pkg-descr b/devel/py-zope.testing/pkg-descr deleted file mode 100644 index 45d3f55b5afe..000000000000 --- a/devel/py-zope.testing/pkg-descr +++ /dev/null @@ -1,3 +0,0 @@ -zope.testing is a package provides a number of testing -frameworks. It includes a flexible test runner, and -supports both doctest and unittest. diff --git a/devel/py-zope.traversing/Makefile b/devel/py-zope.traversing/Makefile deleted file mode 100644 index 782f202d35c6..000000000000 --- a/devel/py-zope.traversing/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -PORTNAME= zope.traversing -PORTVERSION= 3.14.0 -PORTREVISION= 1 -CATEGORIES= devel python zope -MASTER_SITES= PYPI -PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} -DIST_SUBDIR= zope - -MAINTAINER= zope@FreeBSD.org -COMMENT= Resolving paths in the object hierarchy -WWW= https://pypi.org/project/zope.traversing/ - -LICENSE= ZPL21 - -RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}zope.interface>=0:devel/py-zope.interface@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.component>=0:devel/py-zope.component@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.i18n>=0:devel/py-zope.i18n@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.i18nmessageid>=0:textproc/py-zope.i18nmessageid@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.proxy>3.4.2:net/py-zope.proxy@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.publisher>=0:devel/py-zope.publisher@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}zope.location>=3.7.0:devel/py-zope.location@${PY_FLAVOR} - -USES= python zip -USE_PYTHON= distutils autoplist - -NO_ARCH= yes - -.include <bsd.port.mk> diff --git a/devel/py-zope.traversing/distinfo b/devel/py-zope.traversing/distinfo deleted file mode 100644 index df5d500ac63d..000000000000 --- a/devel/py-zope.traversing/distinfo +++ /dev/null @@ -1,2 +0,0 @@ -SHA256 (zope/zope.traversing-3.14.0.zip) = 42ba381171f6d6083f0914b5d2da3c6a312fbcd3e1a56bfb7675c8324a4b9ce4 -SIZE (zope/zope.traversing-3.14.0.zip) = 53672 diff --git a/devel/py-zope.traversing/pkg-descr b/devel/py-zope.traversing/pkg-descr deleted file mode 100644 index ed090e9064d4..000000000000 --- a/devel/py-zope.traversing/pkg-descr +++ /dev/null @@ -1,2 +0,0 @@ -The zope.traversing package provides adapteres for resolving object -paths by traversing an object hierarchy. |