From 1f9f8f706ea67491287c38011bbaebd78bbaa144 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Thu, 9 Aug 2018 09:08:29 -0300 Subject: [PATCH 1/9] Initial fix for limit number of items on list tile & collection tile --- src/collective/cover/tiles/list.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/collective/cover/tiles/list.py b/src/collective/cover/tiles/list.py index ba8f85090..6fa9ffc36 100644 --- a/src/collective/cover/tiles/list.py +++ b/src/collective/cover/tiles/list.py @@ -42,7 +42,6 @@ class IListTile(IPersistentCoverTile): ) form.omitted('uuids') - # XXX: this field should be used to replace the 'limit' attribute form.omitted('count') form.no_omit(IDefaultConfigureForm, 'count') count = schema.Int( @@ -155,11 +154,12 @@ def Date(self, obj): assert len(brain) == 1 return super(ListTile, self).Date(brain[0]) - # TODO: get rid of this by replacing it with the 'count' field def set_limit(self): - for field in self.get_configured_fields(): - if field and field.get('id') == 'uuids': - self.limit = int(field.get('size', self.limit)) + self.configured_fields = self.get_tile_configuration() + limit_conf = self.configured_fields.get('count',None) + + if limit_conf: + self.limit = int(limit_conf.get('offset', self.limit)) def populate_with_object(self, obj): """ Add an object to the list of items From e8a455514e05c449cf26bc67d681d47615014b5a Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Fri, 10 Aug 2018 13:15:20 -0300 Subject: [PATCH 2/9] Refactoring --- src/collective/cover/tiles/list.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/collective/cover/tiles/list.py b/src/collective/cover/tiles/list.py index 6fa9ffc36..a6bbb7644 100644 --- a/src/collective/cover/tiles/list.py +++ b/src/collective/cover/tiles/list.py @@ -44,10 +44,10 @@ class IListTile(IPersistentCoverTile): form.omitted('count') form.no_omit(IDefaultConfigureForm, 'count') - count = schema.Int( + count = schema.List( title=_(u'Number of items to display'), + value_type=schema.TextLine(), required=False, - default=5, ) form.omitted('title') @@ -155,11 +155,14 @@ def Date(self, obj): return super(ListTile, self).Date(brain[0]) def set_limit(self): - self.configured_fields = self.get_tile_configuration() - limit_conf = self.configured_fields.get('count',None) + self.config_fields = self.get_tile_configuration() + limit_conf = self.config_fields.get('count', None) - if limit_conf: - self.limit = int(limit_conf.get('offset', self.limit)) + if limit_conf and 'size' in limit_conf.keys(): + self.limit = int(limit_conf.get('size', self.limit)) + + size = self.limit + offset = self.config_fields.get('offset', 0) def populate_with_object(self, obj): """ Add an object to the list of items From 7417fd7980edbbbd148b25c493a4e50a47e97d96 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 12:59:04 -0300 Subject: [PATCH 3/9] Field named to 'count' --- src/collective/cover/tiles/collection.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/collective/cover/tiles/collection.py b/src/collective/cover/tiles/collection.py index 6aaeec4f7..12738a59f 100644 --- a/src/collective/cover/tiles/collection.py +++ b/src/collective/cover/tiles/collection.py @@ -55,10 +55,9 @@ class ICollectionTile(IPersistentCoverTile): required=False, ) - # FIXME: this field should be named 'count' - form.omitted('number_to_show') - form.no_omit(IDefaultConfigureForm, 'number_to_show') - number_to_show = schema.List( + form.omitted('count') + form.no_omit(IDefaultConfigureForm, 'count') + count = schema.List( title=_(u'Number of items to display'), value_type=schema.TextLine(), required=False, @@ -106,7 +105,7 @@ def get_title(self): def results(self): self.configured_fields = self.get_configured_fields() - size_conf = [i for i in self.configured_fields if i['id'] == 'number_to_show'] + size_conf = [i for i in self.configured_fields if i['id'] == 'count'] if size_conf and 'size' in size_conf[0].keys(): size = int(size_conf[0]['size']) From eb2ca16d6937439f5e9605340f51635d9fa939b8 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 13:05:22 -0300 Subject: [PATCH 4/9] Step to fix and convert field in collection tile --- .../cover/profiles/default/metadata.xml | 2 +- src/collective/cover/upgrades/__init__.py | 17 ++++++++ src/collective/cover/upgrades/configure.zcml | 1 + src/collective/cover/upgrades/v22/__init__.py | 43 +++++++++++++++++++ .../cover/upgrades/v22/configure.zcml | 20 +++++++++ 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/collective/cover/upgrades/v22/__init__.py create mode 100644 src/collective/cover/upgrades/v22/configure.zcml diff --git a/src/collective/cover/profiles/default/metadata.xml b/src/collective/cover/profiles/default/metadata.xml index 79f652f3a..dc59034e2 100644 --- a/src/collective/cover/profiles/default/metadata.xml +++ b/src/collective/cover/profiles/default/metadata.xml @@ -1,6 +1,6 @@ - 21 + 22 profile-collective.js.galleria:default profile-collective.js.jqueryui:default diff --git a/src/collective/cover/upgrades/__init__.py b/src/collective/cover/upgrades/__init__.py index 7a0eca2e1..d8342090a 100644 --- a/src/collective/cover/upgrades/__init__.py +++ b/src/collective/cover/upgrades/__init__.py @@ -7,6 +7,7 @@ from plone.tiles.interfaces import ITileDataManager from plone.tiles.interfaces import ITileType from zope.component import getUtility +from zope.dottedname.resolve import resolve from zope.schema.interfaces import IVocabularyFactory import six @@ -128,6 +129,22 @@ def _get_tiles_inherit_from_list(context): return tiles_to_update +def _get_tiles_inherit_from_interface(context, iface=None): + """Returns a list of all tiles inherited from a given interface.""" + name = 'collective.cover.EnabledTiles' + tiles_to_update = [] + + if iface: + Iface = resolve(iface) + enabled_tiles = getUtility(IVocabularyFactory, name)(context) + tiles_to_update = [] + for i in enabled_tiles: + tile = getUtility(ITileType, i.value) + if issubclass(tile.schema, Iface): + tiles_to_update.append(i.value) + return tiles_to_update + + def upgrade_carousel_tiles_custom_url(context): """Update structure of tiles inheriting from the list tile.""" # Get covers diff --git a/src/collective/cover/upgrades/configure.zcml b/src/collective/cover/upgrades/configure.zcml index b07b84be8..49ecb4f04 100644 --- a/src/collective/cover/upgrades/configure.zcml +++ b/src/collective/cover/upgrades/configure.zcml @@ -11,5 +11,6 @@ + diff --git a/src/collective/cover/upgrades/v22/__init__.py b/src/collective/cover/upgrades/v22/__init__.py new file mode 100644 index 000000000..940c36c9d --- /dev/null +++ b/src/collective/cover/upgrades/v22/__init__.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from collective.cover.controlpanel import ICoverSettings +from collective.cover.interfaces import ICover +from collective.cover.logger import logger +from collective.cover.tiles.configuration import ANNOTATIONS_KEY_PREFIX as PREFIX +from collective.cover.upgrades import _get_tiles_inherit_from_interface +from copy import deepcopy +from plone import api +from plone.registry.interfaces import IRegistry +from plone.tiles.interfaces import ITileDataManager +from six import iteritems +from zope.component import getUtility + +import json + + +def fix_fields(context): + """tiles here""" + + # Get covers + covers = context.portal_catalog(portal_type='collective.cover.content') + iface = "collective.cover.tiles.collection.ICollectionTile" + logger.info('About to update {0} objects'.format(len(covers))) + tiles_to_update = _get_tiles_inherit_from_interface(context, + iface=iface) + logger.info('{0} tile types will be updated ({1})'.format( + len(tiles_to_update), ', '.join(tiles_to_update))) + for cover in covers: + obj = cover.getObject() + tile_ids = obj.list_tiles(types=tiles_to_update) + for tile_id in tile_ids: + tile = obj.get_tile(tile_id) + tile_conf = tile.get_tile_configuration() + + if tile_conf.has_key('number_to_show'): + tile_conf['count'] = tile_conf['number_to_show'] + tile_conf.pop('number_to_show') + tile.set_tile_configuration(tile_conf) + + msg = 'Tile {0} at {1} updated' + logger.info(msg.format(tile_id, cover.getPath())) + + logger.info('Done') diff --git a/src/collective/cover/upgrades/v22/configure.zcml b/src/collective/cover/upgrades/v22/configure.zcml new file mode 100644 index 000000000..7600b6b1f --- /dev/null +++ b/src/collective/cover/upgrades/v22/configure.zcml @@ -0,0 +1,20 @@ + + + + + + + + + From c94954054fcfa7ca0e58f4677c6483f44dab64b9 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 13:42:29 -0300 Subject: [PATCH 5/9] TYPO --- src/collective/cover/tiles/list.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/collective/cover/tiles/list.py b/src/collective/cover/tiles/list.py index 9d54b3986..61af476d3 100644 --- a/src/collective/cover/tiles/list.py +++ b/src/collective/cover/tiles/list.py @@ -159,9 +159,6 @@ def set_limit(self): if limit_conf and 'size' in limit_conf.keys(): self.limit = int(limit_conf.get('size', self.limit)) - size = self.limit - offset = self.config_fields.get('offset', 0) - def populate_with_object(self, obj): """ Add an object to the list of items From a39e629a09931e77f44195a6cfeabf37b4f82ff7 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 13:42:54 -0300 Subject: [PATCH 6/9] Fix upgrade step --- src/collective/cover/upgrades/v22/__init__.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/collective/cover/upgrades/v22/__init__.py b/src/collective/cover/upgrades/v22/__init__.py index 940c36c9d..7b6b20729 100644 --- a/src/collective/cover/upgrades/v22/__init__.py +++ b/src/collective/cover/upgrades/v22/__init__.py @@ -3,13 +3,15 @@ from collective.cover.interfaces import ICover from collective.cover.logger import logger from collective.cover.tiles.configuration import ANNOTATIONS_KEY_PREFIX as PREFIX -from collective.cover.upgrades import _get_tiles_inherit_from_interface from copy import deepcopy from plone import api from plone.registry.interfaces import IRegistry from plone.tiles.interfaces import ITileDataManager +from plone.tiles.interfaces import ITileType from six import iteritems from zope.component import getUtility +from zope.dottedname.resolve import resolve +from zope.schema.interfaces import IVocabularyFactory import json @@ -41,3 +43,17 @@ def fix_fields(context): logger.info(msg.format(tile_id, cover.getPath())) logger.info('Done') + +def _get_tiles_inherit_from_interface(context, iface=None): + """Returns a list of all tiles inherited from a given interface.""" + name = 'collective.cover.EnabledTiles' + tiles_to_update = [] + if iface: + Iface = resolve(iface) + enabled_tiles = getUtility(IVocabularyFactory, name)(context) + tiles_to_update = [] + for i in enabled_tiles: + tile = getUtility(ITileType, i.value) + if issubclass(tile.schema, Iface): + tiles_to_update.append(i.value) + return tiles_to_update From 4bdae9d8aa2f2e15bad1d999ddcc988f593753bc Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 14:21:01 -0300 Subject: [PATCH 7/9] Flake8 fixe --- src/collective/cover/upgrades/__init__.py | 3 ++- src/collective/cover/upgrades/v22/__init__.py | 18 ++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/collective/cover/upgrades/__init__.py b/src/collective/cover/upgrades/__init__.py index c06a26a6c..be26b41a3 100644 --- a/src/collective/cover/upgrades/__init__.py +++ b/src/collective/cover/upgrades/__init__.py @@ -14,4 +14,5 @@ def cook_javascript_resources(context): # pragma: no cover """Cook JavaScript resources.""" js_tool = api.portal.get_tool('portal_javascripts') js_tool.cookResources() - logger.info('JavaScript resources were cooked') \ No newline at end of file + logger.info('JavaScript resources were cooked') + diff --git a/src/collective/cover/upgrades/v22/__init__.py b/src/collective/cover/upgrades/v22/__init__.py index 7b6b20729..dd79d16b5 100644 --- a/src/collective/cover/upgrades/v22/__init__.py +++ b/src/collective/cover/upgrades/v22/__init__.py @@ -1,30 +1,19 @@ # -*- coding: utf-8 -*- -from collective.cover.controlpanel import ICoverSettings -from collective.cover.interfaces import ICover from collective.cover.logger import logger -from collective.cover.tiles.configuration import ANNOTATIONS_KEY_PREFIX as PREFIX -from copy import deepcopy -from plone import api -from plone.registry.interfaces import IRegistry -from plone.tiles.interfaces import ITileDataManager from plone.tiles.interfaces import ITileType -from six import iteritems from zope.component import getUtility from zope.dottedname.resolve import resolve from zope.schema.interfaces import IVocabularyFactory -import json - def fix_fields(context): """tiles here""" # Get covers covers = context.portal_catalog(portal_type='collective.cover.content') - iface = "collective.cover.tiles.collection.ICollectionTile" + iface = 'collective.cover.tiles.collection.ICollectionTile' logger.info('About to update {0} objects'.format(len(covers))) - tiles_to_update = _get_tiles_inherit_from_interface(context, - iface=iface) + tiles_to_update = _get_tiles_inherit_from_interface(context, iface=iface) logger.info('{0} tile types will be updated ({1})'.format( len(tiles_to_update), ', '.join(tiles_to_update))) for cover in covers: @@ -34,7 +23,7 @@ def fix_fields(context): tile = obj.get_tile(tile_id) tile_conf = tile.get_tile_configuration() - if tile_conf.has_key('number_to_show'): + if 'number_to_show' in tile_conf.keys(): tile_conf['count'] = tile_conf['number_to_show'] tile_conf.pop('number_to_show') tile.set_tile_configuration(tile_conf) @@ -44,6 +33,7 @@ def fix_fields(context): logger.info('Done') + def _get_tiles_inherit_from_interface(context, iface=None): """Returns a list of all tiles inherited from a given interface.""" name = 'collective.cover.EnabledTiles' From 0fb2baae9ea5cfe8bb894d9161fc2205a251f6cd Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Tue, 14 Aug 2018 14:22:35 -0300 Subject: [PATCH 8/9] fix tests --- src/collective/cover/tests/test_collection_tile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/collective/cover/tests/test_collection_tile.py b/src/collective/cover/tests/test_collection_tile.py index 0841f9eda..2764ab420 100644 --- a/src/collective/cover/tests/test_collection_tile.py +++ b/src/collective/cover/tests/test_collection_tile.py @@ -142,7 +142,7 @@ def test_number_of_items(self): self.assertEqual(len(self.tile.results()), 3) tile_conf = self.tile.get_tile_configuration() - tile_conf['number_to_show']['size'] = 2 + tile_conf['count']['size'] = 2 self.tile.set_tile_configuration(tile_conf) # Collection has three images and shows the first two items. @@ -166,7 +166,7 @@ def test_offset(self): self.assertEqual(items[1].getId(), 'my-image2') # Add a size, so only one item is left. - tile_conf['number_to_show']['size'] = 1 + tile_conf['count']['size'] = 1 self.tile.set_tile_configuration(tile_conf) items = self.tile.results() From 39181f51604a56eae22ccf300c386012ad810081 Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Wed, 15 Aug 2018 06:01:15 -0300 Subject: [PATCH 9/9] PEP8 --- src/collective/cover/upgrades/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/collective/cover/upgrades/__init__.py b/src/collective/cover/upgrades/__init__.py index be26b41a3..72e2d2b53 100644 --- a/src/collective/cover/upgrades/__init__.py +++ b/src/collective/cover/upgrades/__init__.py @@ -15,4 +15,3 @@ def cook_javascript_resources(context): # pragma: no cover js_tool = api.portal.get_tool('portal_javascripts') js_tool.cookResources() logger.info('JavaScript resources were cooked') -