From 39919cc0a44e777c861fa7cea05195ee631cf9a0 Mon Sep 17 00:00:00 2001 From: Steffen Allner Date: Fri, 5 Oct 2018 11:50:17 +0200 Subject: [PATCH 1/3] Cover batch feature with tests. --- src/DocumentTemplate/tests/test_DT_In.py | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/DocumentTemplate/tests/test_DT_In.py b/src/DocumentTemplate/tests/test_DT_In.py index 35a0944..73220fe 100644 --- a/src/DocumentTemplate/tests/test_DT_In.py +++ b/src/DocumentTemplate/tests/test_DT_In.py @@ -407,6 +407,48 @@ def test_DT_In__InClass__renderwb__05(self): 'Item 3: alberta') self.assertEqual(res, expected) + def test_DT_In__InClass__renderwb__06(self): + """It can access previous and next batch of a sequence.""" + seq = [Dummy('alberta'), Dummy('berta'), Dummy('barnie')] + html = self.doc_class( + '' + 'Prev index: ' + '' + '' + 'Next index: ' + '') + res = html(seq=seq) + expected = ('Prev index: 1 ' + 'Next index: 3') + self.assertEqual(res, expected) + # Also with else clauses for edges of the sequence + html = self.doc_class( + '' + 'Prev index: ' + '' + 'No prev ' + '' + '' + 'Next index: ' + '' + 'No next' + '') + res = html(seq=seq) + expected = ('No prev ' + 'No next') + self.assertEqual(res, expected) + # or it renders nothing if no else is given + html = self.doc_class( + '' + 'Prev index: ' + '' + '' + 'Next index: ' + '') + res = html(seq=seq) + expected = '' + self.assertEqual(res, expected) + def test_DT_In__make_sortfunction__1(self): """It allows two slashes at maximum in sort expression.""" seq = [Dummy('alberta'), Dummy('berta'), Dummy('barnie')] From f1e81cc93ceb12a3947d97bd90a820eea8d91d62 Mon Sep 17 00:00:00 2001 From: Steffen Allner Date: Fri, 5 Oct 2018 14:31:08 +0200 Subject: [PATCH 2/3] Fix iteration over list of tuples. --- CHANGES.rst | 1 + src/DocumentTemplate/DT_In.py | 2 + src/DocumentTemplate/tests/test_DT_In.py | 54 +++++++++++++++++++++++- tox.ini | 2 +- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index ddb77d5..46026cc 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -33,6 +33,7 @@ Bugfixes - Raise proper error if prefix is not simple. - Fix complex multisort in Python 3. + - Fix iteration over list of tuples in Python 3. 3.0b4 (2018-07-12) diff --git a/src/DocumentTemplate/DT_In.py b/src/DocumentTemplate/DT_In.py index 059567a..9c559bf 100644 --- a/src/DocumentTemplate/DT_In.py +++ b/src/DocumentTemplate/DT_In.py @@ -341,6 +341,7 @@ from DocumentTemplate.DT_Util import ValidationError, Eval from DocumentTemplate.DT_Util import simple_name, add_with_prefix from DocumentTemplate.DT_InSV import sequence_variables, opt +from zope.sequencesort.ssort import _Smallest if sys.version_info > (3, 0): unicode = str @@ -831,6 +832,7 @@ def sort_sequence(self, sequence, md): try: k = k() except Exception: + k = _Smallest pass s.append((k, client)) diff --git a/src/DocumentTemplate/tests/test_DT_In.py b/src/DocumentTemplate/tests/test_DT_In.py index 73220fe..3c8372c 100644 --- a/src/DocumentTemplate/tests/test_DT_In.py +++ b/src/DocumentTemplate/tests/test_DT_In.py @@ -10,9 +10,14 @@ class DummySection(object): class Dummy(object): """Dummy with attribute""" - def __init__(self, name, number=0): + def __init__(self, name, number=0, _callable=0): self.name = name self.number = number + self._callable = _callable + + @property + def maybe_callable(self): + return self._callable class TestIn(unittest.TestCase): @@ -306,6 +311,53 @@ def test_DT_In__InClass__renderwob__07(self): 'Item 4: alberta , 2') self.assertEqual(res, expected) + def test_DT_In__InClass__renderwob__08(self): + """It can iterate over list of tuples.""" + seq = [('alberta', 3), ('ylberta', 1), ('barnie', 2)] + html = self.doc_class( + '' + 'Item : ' + '' + '') + res = html(seq=seq) + expected = ( + 'Item 1: 3' + 'Item 2: 1' + 'Item 3: 2') + self.assertEqual(res, expected) + # also sorted + html = self.doc_class( + '' + 'Item : ' + '' + '') + res = html(seq=seq) + expected = ( + 'Item 1: 3' + 'Item 2: 2' + 'Item 3: 1') + self.assertEqual(res, expected) + + def test_DT_In__InClass__renderwob__09(self): + """It can also contain callables as values.""" + # It catches errors and treats those as smallest + seq = [ + Dummy('alberta', _callable=lambda: 3), + Dummy('ylberta', _callable=lambda: 0), + Dummy('barnie', _callable=lambda: [][2]), + ] + html = self.doc_class( + '' + 'Item : ' + '' + '') + res = html(seq=seq) + expected = ( + 'Item 1: barnie' + 'Item 2: ylberta' + 'Item 3: alberta') + self.assertEqual(res, expected) + def test_DT_In__InClass__renderwb__01(self): """It does not allow strings as sequence in batch mode.""" html = self.doc_class( diff --git a/tox.ini b/tox.ini index 6368fd8..ce932b7 100644 --- a/tox.ini +++ b/tox.ini @@ -30,7 +30,7 @@ commands = coverage combine coverage html coverage xml - coverage report --fail-under=68 + coverage report --fail-under=70 [testenv:flake8] basepython = python3.6 From 0d7209f4682e41e4fc8dfa603b9b3f6e2dd7c1d3 Mon Sep 17 00:00:00 2001 From: Michael Howitz Date: Fri, 5 Oct 2018 16:14:04 +0200 Subject: [PATCH 3/3] Clean-up. --- CHANGES.rst | 6 ++- src/DocumentTemplate/DT_In.py | 1 - src/DocumentTemplate/DTtestExpr.py | 49 ----------------------- src/DocumentTemplate/pDocumentTemplate.py | 4 +- tox.ini | 2 +- 5 files changed, 7 insertions(+), 55 deletions(-) delete mode 100644 src/DocumentTemplate/DTtestExpr.py diff --git a/CHANGES.rst b/CHANGES.rst index 46026cc..b9822a0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,12 +7,14 @@ Changelog Breaking changes ++++++++++++++++ -- Removed ``VSEval`` module. Please use DT_Util.EVal now. +- Remove ``VSEval`` module. Please use DT_Util.EVal now. + +- Remove ``DTtestExpr`` module. It contained nothing useful. Features ++++++++ -- Added support for Python 3.7. +- Add support for Python 3.7. Bugfixes ++++++++ diff --git a/src/DocumentTemplate/DT_In.py b/src/DocumentTemplate/DT_In.py index 9c559bf..028f500 100644 --- a/src/DocumentTemplate/DT_In.py +++ b/src/DocumentTemplate/DT_In.py @@ -833,7 +833,6 @@ def sort_sequence(self, sequence, md): k = k() except Exception: k = _Smallest - pass s.append((k, client)) diff --git a/src/DocumentTemplate/DTtestExpr.py b/src/DocumentTemplate/DTtestExpr.py deleted file mode 100644 index f3d2918..0000000 --- a/src/DocumentTemplate/DTtestExpr.py +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Zope Foundation and Contributors. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE -# -############################################################################## - -from DocumentTemplate import HTML - - -def test1(): - print(HTML( - 'area code=')(phone='7035551212')) - - -def test2(): - print(HTML( - 'area code=')(phone='7035551212')) - - -def test3(): - print(HTML( - 'area code=')(phone='7035551212')) - - -def test4(): - h = HTML( - """ - - level was 1 - - level was 2 - - level was 3 - - level was something else - - """) - - for i in range(4): - print('-' * 77) - print('%s%s' % (i, h(level=i))) - print('-' * 77) diff --git a/src/DocumentTemplate/pDocumentTemplate.py b/src/DocumentTemplate/pDocumentTemplate.py index 80cece4..ea7c041 100644 --- a/src/DocumentTemplate/pDocumentTemplate.py +++ b/src/DocumentTemplate/pDocumentTemplate.py @@ -13,7 +13,7 @@ """This module is no longer actively used. """ -from DocumentTemplate._DocumentTemplate import ( # NOQA +from DocumentTemplate._DocumentTemplate import ( # noqa: F401 pragma: nocover DictInstance, InstanceDict, join_unicode, @@ -25,4 +25,4 @@ import warnings warnings.warn('pDocumentTemplate is not longer in active use. ' 'It remains only as an implementation reference.', - DeprecationWarning) + DeprecationWarning) # pragma: nocover diff --git a/tox.ini b/tox.ini index ce932b7..7cd86f5 100644 --- a/tox.ini +++ b/tox.ini @@ -30,7 +30,7 @@ commands = coverage combine coverage html coverage xml - coverage report --fail-under=70 + coverage report --fail-under=69.5 [testenv:flake8] basepython = python3.6