Skip to content

Commit

Permalink
Merge pull request #33 from plone/python3
Browse files Browse the repository at this point in the history
fix diff and tests in py3
  • Loading branch information
pbauer authored Sep 21, 2018
2 parents 96e8d47 + 711e577 commit d12d109
Show file tree
Hide file tree
Showing 21 changed files with 189 additions and 165 deletions.
5 changes: 3 additions & 2 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ New features:

Bug fixes:

- *add item here*
- Fix diff and tests in py3
[pbauer, hverlarde, jensens]


3.2.0 (2018-04-03)
Expand Down Expand Up @@ -45,7 +46,7 @@ Bug fixes:

New features:

- Add Python 2 / 3 compatibility [davilima6]
- Add Python 2 / 3 compatibility [davilima6]


3.1.4 (2017-03-23)
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/ATCompoundDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from Products.CMFDiffTool.BinaryDiff import BinaryDiff
from Products.CMFDiffTool.CMFDTHtmlDiff import CMFDTHtmlDiff
from Products.CMFDiffTool.FieldDiff import FieldDiff
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/BaseDiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from Acquisition import aq_base
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from plone.dexterity.interfaces import IDexterityContent
from Products.CMFDiffTool import CMFDiffToolMessageFactory as _
from Products.CMFDiffTool.interfaces import IDifference
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/BinaryDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from os import linesep
from Products.CMFDiffTool.BaseDiff import _getValue
from Products.CMFDiffTool.FieldDiff import FieldDiff
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/CMFDTHtmlDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from Products.CMFDiffTool.libs import htmldiff
from Products.CMFDiffTool.TextDiff import TextDiff

Expand Down
4 changes: 2 additions & 2 deletions Products/CMFDiffTool/CMFDiffTool.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""
from AccessControl import ClassSecurityInfo
from Acquisition import aq_base
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from OFS.SimpleItem import SimpleItem
from Products.CMFCore.permissions import ManagePortal
from Products.CMFCore.utils import registerToolInterface
Expand Down Expand Up @@ -88,7 +88,7 @@ def setDiffField(self, pt_name, field, diff):

def listDiffTypes(self):
"""List the names of the registered difference types"""
return self._difftypes.keys()
return list(self._difftypes)

security.declareProtected(ManagePortal, 'getDiffType') # NOQA

Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/FieldDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from Products.CMFDiffTool.BaseDiff import _getValue
from Products.CMFDiffTool.BaseDiff import BaseDiff
from six.moves import range
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/ListDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from Products.CMFDiffTool.FieldDiff import FieldDiff
from six.moves import range

Expand Down
31 changes: 21 additions & 10 deletions Products/CMFDiffTool/TextDiff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from os import linesep
from Products.CMFDiffTool import CMFDiffToolMessageFactory as _
from Products.CMFDiffTool.FieldDiff import FieldDiff
Expand All @@ -8,6 +8,7 @@
from zope.component.hooks import getSite

import difflib
import six


class TextDiff(FieldDiff):
Expand All @@ -33,11 +34,17 @@ def _parseField(self, value, filename=None):

def unified_diff(self):
"""Return a unified diff"""
a = [safe_utf8(i) for i in
self._parseField(self.oldValue, filename=self.oldFilename)]
b = [safe_utf8(i) for i in
self._parseField(self.newValue, filename=self.newFilename)]
return linesep.join(difflib.unified_diff(a, b, self.id1, self.id2))
a = self._parseField(self.oldValue, filename=self.oldFilename)
b = self._parseField(self.newValue, filename=self.newFilename)
if six.PY2:
a = [safe_utf8(i) for i in a]
b = [safe_utf8(i) for i in b]
# in py3 unified_diff does not accept None for ids (id1 and id2)
# But TextDiff() sets None as default. We overwrite this here so the
# default of unified_diff ('') can be used .
cleanargs = [a, b, self.id1, self.id2]
cleanargs = [i for i in cleanargs if i]
return linesep.join(difflib.unified_diff(*cleanargs))

def html_diff(self, context=True, wrapcolumn=40):
"""Return an HTML table showing differences"""
Expand All @@ -48,10 +55,14 @@ def html_diff(self, context=True, wrapcolumn=40):
b = [safe_unicode(i) for i in
self._parseField(self.newValue, filename=self.newFilename)]
vis_diff = difflib.HtmlDiff(wrapcolumn=wrapcolumn)
diff = safe_utf8(vis_diff.make_table(a, b,
safe_unicode(self.id1),
safe_unicode(self.id2),
context=context))
diff = vis_diff.make_table(
a,
b,
safe_unicode(self.id1),
safe_unicode(self.id2),
context=context)
if six.PY2:
diff = safe_utf8(diff)
return diff

def inline_diff(self):
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/choicediff.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from plone.dexterity.interfaces import IDexterityFTI
from plone.dexterity.utils import getAdditionalSchemata
from Products.CMFDiffTool.TextDiff import AsTextDiff
Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/libs/htmldiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
Better results if you use mxTidy first. The output is HTML.
"""

from __future__ import print_function
from difflib import SequenceMatcher
from six import StringIO

Expand Down
2 changes: 1 addition & 1 deletion Products/CMFDiffTool/namedfile.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from App.class_init import InitializeClass
from AccessControl.class_init import InitializeClass
from plone.namedfile import NamedFile
from Products.CMFDiffTool.BinaryDiff import BinaryDiff
from Products.CMFDiffTool.ListDiff import ListDiff
Expand Down
32 changes: 17 additions & 15 deletions Products/CMFDiffTool/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE
from plone.app.testing import FunctionalTesting
from plone.app.testing import PloneSandboxLayer
from plone.app.testing.bbb import PTC_FIXTURE
from plone.dexterity.fti import DexterityFTI
from Products.CMFCore.utils import getToolByName
from zope.component import getSiteManager
from zope.schema.interfaces import IVocabularyFactory
from zope.schema.vocabulary import SimpleTerm
from zope.schema.vocabulary import SimpleVocabulary

import six


TEST_CONTENT_TYPE_ID = 'TestContentType'

Expand Down Expand Up @@ -89,24 +90,25 @@ def setUpPloneSite(self, portal):

PACKAGE_DX_FIXTURE = DXLayer()

if six.PY2:
from plone.app.testing.bbb import PTC_FIXTURE

class ATLayer(PloneSandboxLayer):

class ATLayer(PloneSandboxLayer):
defaultBases = (PTC_FIXTURE, )

defaultBases = (PTC_FIXTURE, )
def setUpZope(self, app, configurationContext):
# setup schema extender if available
try:
from archetypes import schemaextender
self.loadZCML(package=schemaextender)
except ImportError:
pass

def setUpZope(self, app, configurationContext):
# setup schema extender if available
try:
from archetypes import schemaextender
self.loadZCML(package=schemaextender)
except ImportError:
pass
PACKAGE_AT_FIXTURE = ATLayer()
CMFDiffToolATLayer = FunctionalTesting(
bases=(PACKAGE_AT_FIXTURE, ), name='Products.CMFDiffTool.AT:functional')

PACKAGE_AT_FIXTURE = ATLayer()

CMFDiffToolLayer = FunctionalTesting(
bases=(PTC_FIXTURE, ), name='Products.CMFDiffTool:functional')
CMFDiffToolDXLayer = FunctionalTesting(
bases=(PACKAGE_DX_FIXTURE, ), name='Products.CMFDiffTool.DX:functional')
CMFDiffToolATLayer = FunctionalTesting(
bases=(PACKAGE_AT_FIXTURE, ), name='Products.CMFDiffTool.AT:functional')
36 changes: 16 additions & 20 deletions Products/CMFDiffTool/tests/BaseTestCase.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,30 @@
# -*- coding: utf-8 -*-
# BaseTestCase

from plone.app.testing.bbb import PloneTestCase
from Products.CMFDiffTool.testing import CMFDiffToolATLayer
from Products.CMFDiffTool.testing import CMFDiffToolDXLayer
from Products.CMFDiffTool.testing import CMFDiffToolLayer

import six
import unittest


class BaseTestCase(PloneTestCase):
class BaseDXTestCase(unittest.TestCase):
""" A base testing class for CMFDiffTool
It includes a layer which installes the product
and some testing dependencies in a Plone site.
"""
layer = CMFDiffToolLayer
layer = CMFDiffToolDXLayer

def setUp(self):
self.portal = self.layer['portal']

class BaseATTestCase(PloneTestCase):
""" A base testing class for CMFDiffTool

It includes a layer which installes the product
and some testing dependencies in a Plone site.
"""
layer = CMFDiffToolATLayer
if six.PY2:
from plone.app.testing.bbb import PloneTestCase
from Products.CMFDiffTool.testing import CMFDiffToolATLayer

class BaseATTestCase(PloneTestCase):
""" A base testing class for CMFDiffTool
class BaseDXTestCase(PloneTestCase):
""" A base testing class for CMFDiffTool
It includes a layer which installes the product
and some testing dependencies in a Plone site.
"""
layer = CMFDiffToolDXLayer
It includes a layer which installes the product
and some testing dependencies in a Plone site.
"""
layer = CMFDiffToolATLayer
Loading

0 comments on commit d12d109

Please sign in to comment.