-
-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
Showing
1 changed file
with
20 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
|