Skip to content

Commit

Permalink
[fc] Repository: Products.CMFPlone
Browse files Browse the repository at this point in the history
Branch: refs/heads/master
Date: 2018-12-04T16:58:20+01:00
Author: ale-rt (ale-rt) <alessandro.pisa@gmail.com>
Commit: plone/Products.CMFPlone@2a02f1e

Restore the possibility to sort catalog query results with multiple indexes

Fixes #2464

Files changed:
A news/2464.fixed
M Products/CMFPlone/CatalogTool.py
M Products/CMFPlone/tests/testCatalogTool.py
Repository: Products.CMFPlone

Branch: refs/heads/master
Date: 2018-12-05T08:53:57+01:00
Author: Jens W. Klein (jensens) <jk@kleinundpartner.at>
Commit: plone/Products.CMFPlone@0aa4ec5

Merge pull request #2648 from plone/5.2.x-2464-fix-sorting-multiple-columns

Restore the possibility to sort catalog query results with multiple indexes [5.2.x]

Files changed:
A news/2464.fixed
M Products/CMFPlone/CatalogTool.py
M Products/CMFPlone/tests/testCatalogTool.py
  • Loading branch information
jensens committed Dec 5, 2018
1 parent a10215c commit be70041
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions last_commit.txt
Original file line number Diff line number Diff line change
@@ -1,34 +1,38 @@
Repository: plone.app.querystring
Repository: Products.CMFPlone


Branch: refs/heads/master
Date: 2018-12-05T07:44:48+01:00
Author: Jens W. Klein (jensens) <jk@kleinundpartner.at>
Commit: https://github.com/plone/plone.app.querystring/commit/eef5cdd9b258910a655376ec87119d48e568ddff
Date: 2018-12-04T16:58:20+01:00
Author: ale-rt (ale-rt) <alessandro.pisa@gmail.com>
Commit: https://github.com/plone/Products.CMFPlone/commit/2a02f1eebff05c5b4a00a6163ee13b1f5008f336

Restore the possibility to sort catalog query results with multiple indexes

Do not show default profile as installable (already installed with core)
Fixes #2464

Files changed:
M CHANGES.rst
M plone/app/querystring/hiddenprofiles.py
A news/2464.fixed
M Products/CMFPlone/CatalogTool.py
M Products/CMFPlone/tests/testCatalogTool.py

b'diff --git a/CHANGES.rst b/CHANGES.rst\nindex 0e765b1..65ae66f 100644\n--- a/CHANGES.rst\n+++ b/CHANGES.rst\n@@ -14,7 +14,8 @@ New features:\n \n Bug fixes:\n \n-- *add item here*\n+- Do not show default profile as installable (already installed with core)\n+ [jensens]\n \n \n 1.4.10 (2018-10-31)\ndiff --git a/plone/app/querystring/hiddenprofiles.py b/plone/app/querystring/hiddenprofiles.py\nindex 53c16da..690dc36 100644\n--- a/plone/app/querystring/hiddenprofiles.py\n+++ b/plone/app/querystring/hiddenprofiles.py\n@@ -15,6 +15,7 @@ def getNonInstallableProfiles(self):\n that will be installed as part of the site creation anyways.\n """\n return [\n+ \'plone.app.querystring:default\',\n \'plone.app.querystring:upgrade_to_3\',\n \'plone.app.querystring:upgrade_to_5\',\n \'plone.app.querystring:upgrade_to_6\',\n'
b"diff --git a/Products/CMFPlone/CatalogTool.py b/Products/CMFPlone/CatalogTool.py\nindex 20d8fb7f2..cafc4b433 100644\n--- a/Products/CMFPlone/CatalogTool.py\n+++ b/Products/CMFPlone/CatalogTool.py\n@@ -437,10 +437,20 @@ def searchResults(self, query=None, **kw):\n if not show_inactive and not self.allow_inactive(kw):\n kw['effectiveRange'] = DateTime()\n \n- sort_on = kw.get('sort_on')\n- if sort_on and sort_on not in self.indexes():\n- # I get crazy sort_ons like '194' or 'null'.\n- kw.pop('sort_on')\n+ # filter out invalid sort_on indexes\n+ sort_on = kw.get('sort_on') or []\n+ if isinstance(sort_on, six.string_types):\n+ sort_on = [sort_on]\n+ valid_indexes = self.indexes()\n+ try:\n+ sort_on = [idx for idx in sort_on if idx in valid_indexes]\n+ except TypeError:\n+ # sort_on is not iterable\n+ sort_on = []\n+ if not sort_on:\n+ kw.pop('sort_on', None)\n+ else:\n+ kw['sort_on'] = sort_on\n \n return ZCatalog.searchResults(self, query, **kw)\n \ndiff --git a/Products/CMFPlone/tests/testCatalogTool.py b/Products/CMFPlone/tests/testCatalogTool.py\nindex 5f491ef7e..f3fa4adc1 100644\n--- a/Products/CMFPlone/tests/testCatalogTool.py\n+++ b/Products/CMFPlone/tests/testCatalogTool.py\n@@ -2,6 +2,7 @@\n # -*- encoding: utf-8 -*-\n from Acquisition import aq_base\n from DateTime import DateTime\n+from functools import partial\n from OFS.ObjectManager import REPLACEABLE\n from plone.app.testing import setRoles\n from plone.app.testing import TEST_USER_ID\n@@ -11,21 +12,23 @@\n from plone.indexer.wrapper import IndexableObjectWrapper\n from plone.uuid.interfaces import IAttributeUUID\n from plone.uuid.interfaces import IUUID\n-from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFCore.indexing import processQueue\n+from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFPlone.CatalogTool import CatalogTool\n from Products.CMFPlone.CatalogTool import is_folderish\n from Products.CMFPlone.tests import dummy\n from Products.CMFPlone.tests.PloneTestCase import PloneTestCase\n from Products.CMFPlone.tests.utils import folder_position\n+from z3c.form.interfaces import IFormLayer\n from zope.event import notify\n from zope.interface import alsoProvides\n from zope.lifecycleevent import ObjectCreatedEvent\n-from z3c.form.interfaces import IFormLayer\n+\n import transaction\n import unittest\n import zope.interface\n \n+\n user2 = 'u2'\n group2 = 'g2'\n \n@@ -552,6 +555,36 @@ def afterSetUp(self):\n self.folder.doc5.reindexObject()\n self.folder.doc6.reindexObject()\n \n+ def testSortMultipleColumns(self):\n+ path = '/'.join(self.folder.getPhysicalPath())\n+ query = partial(self.catalog, path=path)\n+ brains = query(sort_on=['portal_type', 'sortable_title'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_'\n+ ],\n+ )\n+ brains = query(sort_on=['portal_type', 'getId'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_',\n+ ]\n+ )\n+\n def testUnknownSortOnIsIgnored(self):\n # You should not get a CatalogError when an invalid sort_on is passed.\n # I get crazy sort_ons like '194' or 'null'.\ndiff --git a/news/2464.fixed b/news/2464.fixed\nnew file mode 100644\nindex 000000000..208e85080\n--- /dev/null\n+++ b/news/2464.fixed\n@@ -0,0 +1 @@\n+Restore the possibility to sort catalog query results with multiple indexes\n"

Repository: plone.app.querystring
Repository: Products.CMFPlone


Branch: refs/heads/master
Date: 2018-12-05T08:48:05+01:00
Date: 2018-12-05T08:53:57+01:00
Author: Jens W. Klein (jensens) <jk@kleinundpartner.at>
Commit: https://github.com/plone/plone.app.querystring/commit/2826070277ddb4e93b8d4fcb55a761182f2487ee
Commit: https://github.com/plone/Products.CMFPlone/commit/0aa4ec5a81224fcb60f12be70e321d3301f9941c

Merge pull request #91 from plone/noninstallable-default-profile
Merge pull request #2648 from plone/5.2.x-2464-fix-sorting-multiple-columns

Do not show default profile as installable (already installed with core)
Restore the possibility to sort catalog query results with multiple indexes [5.2.x]

Files changed:
M CHANGES.rst
M plone/app/querystring/hiddenprofiles.py
A news/2464.fixed
M Products/CMFPlone/CatalogTool.py
M Products/CMFPlone/tests/testCatalogTool.py

b'diff --git a/CHANGES.rst b/CHANGES.rst\nindex 0e765b1..65ae66f 100644\n--- a/CHANGES.rst\n+++ b/CHANGES.rst\n@@ -14,7 +14,8 @@ New features:\n \n Bug fixes:\n \n-- *add item here*\n+- Do not show default profile as installable (already installed with core)\n+ [jensens]\n \n \n 1.4.10 (2018-10-31)\ndiff --git a/plone/app/querystring/hiddenprofiles.py b/plone/app/querystring/hiddenprofiles.py\nindex 53c16da..690dc36 100644\n--- a/plone/app/querystring/hiddenprofiles.py\n+++ b/plone/app/querystring/hiddenprofiles.py\n@@ -15,6 +15,7 @@ def getNonInstallableProfiles(self):\n that will be installed as part of the site creation anyways.\n """\n return [\n+ \'plone.app.querystring:default\',\n \'plone.app.querystring:upgrade_to_3\',\n \'plone.app.querystring:upgrade_to_5\',\n \'plone.app.querystring:upgrade_to_6\',\n'
b"diff --git a/Products/CMFPlone/CatalogTool.py b/Products/CMFPlone/CatalogTool.py\nindex 20d8fb7f2..cafc4b433 100644\n--- a/Products/CMFPlone/CatalogTool.py\n+++ b/Products/CMFPlone/CatalogTool.py\n@@ -437,10 +437,20 @@ def searchResults(self, query=None, **kw):\n if not show_inactive and not self.allow_inactive(kw):\n kw['effectiveRange'] = DateTime()\n \n- sort_on = kw.get('sort_on')\n- if sort_on and sort_on not in self.indexes():\n- # I get crazy sort_ons like '194' or 'null'.\n- kw.pop('sort_on')\n+ # filter out invalid sort_on indexes\n+ sort_on = kw.get('sort_on') or []\n+ if isinstance(sort_on, six.string_types):\n+ sort_on = [sort_on]\n+ valid_indexes = self.indexes()\n+ try:\n+ sort_on = [idx for idx in sort_on if idx in valid_indexes]\n+ except TypeError:\n+ # sort_on is not iterable\n+ sort_on = []\n+ if not sort_on:\n+ kw.pop('sort_on', None)\n+ else:\n+ kw['sort_on'] = sort_on\n \n return ZCatalog.searchResults(self, query, **kw)\n \ndiff --git a/Products/CMFPlone/tests/testCatalogTool.py b/Products/CMFPlone/tests/testCatalogTool.py\nindex 5f491ef7e..f3fa4adc1 100644\n--- a/Products/CMFPlone/tests/testCatalogTool.py\n+++ b/Products/CMFPlone/tests/testCatalogTool.py\n@@ -2,6 +2,7 @@\n # -*- encoding: utf-8 -*-\n from Acquisition import aq_base\n from DateTime import DateTime\n+from functools import partial\n from OFS.ObjectManager import REPLACEABLE\n from plone.app.testing import setRoles\n from plone.app.testing import TEST_USER_ID\n@@ -11,21 +12,23 @@\n from plone.indexer.wrapper import IndexableObjectWrapper\n from plone.uuid.interfaces import IAttributeUUID\n from plone.uuid.interfaces import IUUID\n-from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFCore.indexing import processQueue\n+from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFPlone.CatalogTool import CatalogTool\n from Products.CMFPlone.CatalogTool import is_folderish\n from Products.CMFPlone.tests import dummy\n from Products.CMFPlone.tests.PloneTestCase import PloneTestCase\n from Products.CMFPlone.tests.utils import folder_position\n+from z3c.form.interfaces import IFormLayer\n from zope.event import notify\n from zope.interface import alsoProvides\n from zope.lifecycleevent import ObjectCreatedEvent\n-from z3c.form.interfaces import IFormLayer\n+\n import transaction\n import unittest\n import zope.interface\n \n+\n user2 = 'u2'\n group2 = 'g2'\n \n@@ -552,6 +555,36 @@ def afterSetUp(self):\n self.folder.doc5.reindexObject()\n self.folder.doc6.reindexObject()\n \n+ def testSortMultipleColumns(self):\n+ path = '/'.join(self.folder.getPhysicalPath())\n+ query = partial(self.catalog, path=path)\n+ brains = query(sort_on=['portal_type', 'sortable_title'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_'\n+ ],\n+ )\n+ brains = query(sort_on=['portal_type', 'getId'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_',\n+ ]\n+ )\n+\n def testUnknownSortOnIsIgnored(self):\n # You should not get a CatalogError when an invalid sort_on is passed.\n # I get crazy sort_ons like '194' or 'null'.\ndiff --git a/news/2464.fixed b/news/2464.fixed\nnew file mode 100644\nindex 000000000..208e85080\n--- /dev/null\n+++ b/news/2464.fixed\n@@ -0,0 +1 @@\n+Restore the possibility to sort catalog query results with multiple indexes\n"

0 comments on commit be70041

Please sign in to comment.