aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Makhmatkhanov <rm@FreeBSD.org>2023-08-27 11:31:13 +0000
committerRuslan Makhmatkhanov <rm@FreeBSD.org>2023-08-27 11:31:13 +0000
commit38d36e52f825a4e943762e4453ec1ebea13a10c7 (patch)
tree2685d5d01d36a7e27db564a7018c572e26d9bef5
parent97fda573d33daad946ef08bea1ccb5bc777c9d3b (diff)
downloadports-38d36e52f825a4e943762e4453ec1ebea13a10c7.tar.gz
ports-38d36e52f825a4e943762e4453ec1ebea13a10c7.zip
zope ports: remove leaf zope ports that have no sense in absence of zope itself
With hat: zope
-rw-r--r--MOVED10
-rw-r--r--devel/Makefile10
-rw-r--r--devel/py-five.globalrequest/Makefile20
-rw-r--r--devel/py-five.globalrequest/distinfo2
-rw-r--r--devel/py-five.globalrequest/pkg-descr1
-rw-r--r--devel/py-zope.browser/Makefile20
-rw-r--r--devel/py-zope.browser/distinfo2
-rw-r--r--devel/py-zope.browser/pkg-descr1
-rw-r--r--devel/py-zope.contenttype/Makefile20
-rw-r--r--devel/py-zope.contenttype/distinfo2
-rw-r--r--devel/py-zope.contenttype/files/patch-2to331
-rw-r--r--devel/py-zope.contenttype/pkg-descr1
-rw-r--r--devel/py-zope.exceptions/Makefile22
-rw-r--r--devel/py-zope.exceptions/distinfo2
-rw-r--r--devel/py-zope.exceptions/pkg-descr3
-rw-r--r--devel/py-zope.globalrequest/Makefile21
-rw-r--r--devel/py-zope.globalrequest/distinfo2
-rw-r--r--devel/py-zope.globalrequest/pkg-descr1
-rw-r--r--devel/py-zope.i18n/Makefile27
-rw-r--r--devel/py-zope.i18n/distinfo2
-rw-r--r--devel/py-zope.i18n/files/patch-2to3529
-rw-r--r--devel/py-zope.i18n/pkg-descr5
-rw-r--r--devel/py-zope.location/Makefile25
-rw-r--r--devel/py-zope.location/distinfo2
-rw-r--r--devel/py-zope.location/pkg-descr1
-rw-r--r--devel/py-zope.publisher/Makefile32
-rw-r--r--devel/py-zope.publisher/distinfo2
-rw-r--r--devel/py-zope.publisher/files/patch-2to31513
-rw-r--r--devel/py-zope.publisher/pkg-descr6
-rw-r--r--devel/py-zope.testing/Makefile23
-rw-r--r--devel/py-zope.testing/distinfo2
-rw-r--r--devel/py-zope.testing/files/patch-2to3145
-rw-r--r--devel/py-zope.testing/pkg-descr3
-rw-r--r--devel/py-zope.traversing/Makefile28
-rw-r--r--devel/py-zope.traversing/distinfo2
-rw-r--r--devel/py-zope.traversing/pkg-descr2
36 files changed, 10 insertions, 2510 deletions
diff --git a/MOVED b/MOVED
index 548523f50966..2d9b99416f46 100644
--- a/MOVED
+++ b/MOVED
@@ -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>&lt;type 'exceptions.ValueError'&gt;</title></head>\n"
- "<body><h2>&lt;type 'exceptions.ValueError'&gt;</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.