Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions news/188.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix merging multiple date operations. @davisagli
8 changes: 8 additions & 0 deletions src/plone/app/querystring/profiles.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,12 @@
directory="profiles/upgrades/to_14"
/>

<genericsetup:registerProfile
name="upgrade_to_15"
title="Querystring Upgrade profile to v15"
description=""
provides="Products.GenericSetup.interfaces.EXTENSION"
directory="profiles/upgrades/to_15"
/>

</configure>
2 changes: 1 addition & 1 deletion src/plone/app/querystring/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<version>14</version>
<version>15</version>
<dependencies>
<dependency>profile-plone.app.registry:default</dependency>
</dependencies>
Expand Down
6 changes: 3 additions & 3 deletions src/plone/app/querystring/profiles/default/registry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
i18n:translate=""
>Before date</value>
<value key="description">Please use YYYY/MM/DD.</value>
<value key="operation">plone.app.querystring.queryparser._lessThan</value>
<value key="operation">plone.app.querystring.queryparser._dateLessThan</value>
<value key="widget">DateWidget</value>
</records>

Expand All @@ -80,7 +80,7 @@
<value key="description"
i18n:translate=""
>Please use YYYY/MM/DD.</value>
<value key="operation">plone.app.querystring.queryparser._largerThan</value>
<value key="operation">plone.app.querystring.queryparser._dateLargerThan</value>
<value key="widget">DateWidget</value>
</records>

Expand All @@ -93,7 +93,7 @@
<value key="description"
i18n:translate=""
>Please use YYYY/MM/DD.</value>
<value key="operation">plone.app.querystring.queryparser._between</value>
<value key="operation">plone.app.querystring.queryparser._dateBetween</value>
<value key="widget">DateRangeWidget</value>
</records>

Expand Down
24 changes: 24 additions & 0 deletions src/plone/app/querystring/profiles/upgrades/to_15/registry.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<registry xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone"
>

<records interface="plone.app.querystring.interfaces.IQueryOperation"
prefix="plone.app.querystring.operation.date.lessThan"
>
<value key="operation">plone.app.querystring.queryparser._dateLessThan</value>
</records>

<records interface="plone.app.querystring.interfaces.IQueryOperation"
prefix="plone.app.querystring.operation.date.largerThan"
>
<value key="operation">plone.app.querystring.queryparser._dateLargerThan</value>
</records>

<records interface="plone.app.querystring.interfaces.IQueryOperation"
prefix="plone.app.querystring.operation.date.between"
>
<value key="operation">plone.app.querystring.queryparser._dateBetween</value>
</records>

</registry>
39 changes: 39 additions & 0 deletions src/plone/app/querystring/queryparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,19 @@ def _between(context, row):
return tmp


def _dateBetween(context, row):
try:
start_date = DateTime(row.values[0])
except DateTimeError:
start_date = DateTime(0)
try:
end_date = DateTime(row.values[1])
except DateTimeError:
end_date = DateTime()
row = Row(index=row.index, operator=row.operator, values=(start_date, end_date))
return _between(context, row)


def _largerThan(context, row):
tmp = {
row.index: {
Expand All @@ -186,6 +199,19 @@ def _intLargerThan(context, row):
}


def _dateLargerThan(context, row):
try:
value = DateTime(row.values)
except (DateTimeError, TypeError, AttributeError):
return {}
return {
row.index: {
"query": value,
"range": "min",
},
}


def _lessThan(context, row):
tmp = {
row.index: {
Expand All @@ -209,6 +235,19 @@ def _intLessThan(context, row):
}


def _dateLessThan(context, row):
try:
value = DateTime(row.values)
except (DateTimeError, TypeError, AttributeError):
return {}
return {
row.index: {
"query": value,
"range": "max",
},
}


def _currentUser(context, row):
"""Current user lookup"""
mt = getToolByName(context, "portal_membership")
Expand Down
24 changes: 24 additions & 0 deletions src/plone/app/querystring/tests/testQueryParser.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,30 @@ def test_merge_ranges(self):
parsed = queryparser.parseFormquery(MockSite(), data)
self.assertEqual(parsed, {"modified": {"query": [10, 20], "range": "minmax"}})

def test_merge_date_operations(self):
data = [
{
"i": "start",
"o": "plone.app.querystring.operation.date.afterRelativeDate",
"v": "0",
},
{
"i": "start",
"o": "plone.app.querystring.operation.date.largerThan",
"v": "2026/05/04",
},
]
parsed = queryparser.parseFormquery(MockSite(), data)
self.assertEqual(
parsed,
{
"start": {
"query": [DateTime("2026/05/04"), DateTime().earliestTime()],
"range": "min",
}
},
)


class TestQueryGenerators(TestQueryParserBase):
def test__between(self):
Expand Down
2 changes: 1 addition & 1 deletion src/plone/app/querystring/tests/testRegistryIntegration.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def test_date_lessthan(self):
self.assertEqual(registry[prefix + ".description"], "Please use YYYY/MM/DD.")
self.assertEqual(
registry[prefix + ".operation"],
"plone.app.querystring.queryparser._lessThan",
"plone.app.querystring.queryparser._dateLessThan",
)


Expand Down
11 changes: 11 additions & 0 deletions src/plone/app/querystring/upgrades.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,15 @@
/>
</genericsetup:upgradeSteps>

<genericsetup:upgradeSteps
profile="plone.app.querystring:default"
source="14"
destination="15"
>
<genericsetup:upgradeDepends
title="Use date-specific lessThan, largerThan, and between operators."
import_profile="plone.app.querystring:upgrade_to_15"
/>
</genericsetup:upgradeSteps>

</configure>